From a846651e46d44086033a5883f3dffc67b4826507 Mon Sep 17 00:00:00 2001 From: tibordome Date: Mon, 25 Jul 2022 15:04:55 +0100 Subject: [PATCH] Added .c and .so files in for_docs folder and updated docs/environment.yml --- .../for_docs/common/profile_classes.c | 37936 ++++++++++++++++ .../for_docs/common/profile_classes.so | Bin 0 -> 3437136 bytes .../for_docs/cython_helpers/helper_class.c | 23349 ++++++++++ .../for_docs/cython_helpers/helper_class.so | Bin 0 -> 1462872 bytes .../for_docs/dens_profs/dens_profs_algos.c | 22420 +++++++++ .../for_docs/dens_profs/dens_profs_algos.so | Bin 0 -> 1422304 bytes .../for_docs/gadget_hdf5/gen_catalogues.c | 21257 +++++++++ .../for_docs/gadget_hdf5/gen_catalogues.so | Bin 0 -> 1277864 bytes .../for_docs/shape_profs/shape_profs_algos.c | 23113 ++++++++++ .../for_docs/shape_profs/shape_profs_algos.so | Bin 0 -> 1438640 bytes docs/environment.yml | 1 + 11 files changed, 128076 insertions(+) create mode 100644 cosmic_profiles/for_docs/common/profile_classes.c create mode 100755 cosmic_profiles/for_docs/common/profile_classes.so create mode 100644 cosmic_profiles/for_docs/cython_helpers/helper_class.c create mode 100755 cosmic_profiles/for_docs/cython_helpers/helper_class.so create mode 100644 cosmic_profiles/for_docs/dens_profs/dens_profs_algos.c create mode 100755 cosmic_profiles/for_docs/dens_profs/dens_profs_algos.so create mode 100644 cosmic_profiles/for_docs/gadget_hdf5/gen_catalogues.c create mode 100755 cosmic_profiles/for_docs/gadget_hdf5/gen_catalogues.so create mode 100644 cosmic_profiles/for_docs/shape_profs/shape_profs_algos.c create mode 100755 cosmic_profiles/for_docs/shape_profs/shape_profs_algos.so diff --git a/cosmic_profiles/for_docs/common/profile_classes.c b/cosmic_profiles/for_docs/common/profile_classes.c new file mode 100644 index 0000000..563cc38 --- /dev/null +++ b/cosmic_profiles/for_docs/common/profile_classes.c @@ -0,0 +1,37936 @@ +/* Generated by Cython 0.29.21 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "extra_compile_args": [ + "-fopenmp" + ], + "extra_link_args": [ + "-fopenmp" + ], + "include_dirs": [ + "/home/tibor/.local/lib/python3.8/site-packages/numpy/core/include", + "." + ], + "name": "common.profile_classes", + "sources": [ + "common/profile_classes.pyx" + ] + }, + "module_name": "common.profile_classes" +} +END: Cython Metadata */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.6+ or Python 3.3+. +#else +#define CYTHON_ABI "0_29_21" +#define CYTHON_HEX_VERSION 0x001D15F0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__common__profile_classes +#define __PYX_HAVE_API__common__profile_classes +/* Early includes */ +#include "pythread.h" +#include +#include +#include +#include "pystate.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +static const char *__pyx_f[] = { + "common/profile_classes.pyx", + "stringsource", +}; +/* MemviewSliceStruct.proto */ +struct __pyx_memoryview_obj; +typedef struct { + struct __pyx_memoryview_obj *memview; + char *data; + Py_ssize_t shape[8]; + Py_ssize_t strides[8]; + Py_ssize_t suboffsets[8]; +} __Pyx_memviewslice; +#define __Pyx_MemoryView_Len(m) (m.shape[0]) + +/* Atomics.proto */ +#include +#ifndef CYTHON_ATOMICS + #define CYTHON_ATOMICS 1 +#endif +#define __pyx_atomic_int_type int +#if CYTHON_ATOMICS && __GNUC__ >= 4 && (__GNUC_MINOR__ > 1 ||\ + (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL >= 2)) &&\ + !defined(__i386__) + #define __pyx_atomic_incr_aligned(value, lock) __sync_fetch_and_add(value, 1) + #define __pyx_atomic_decr_aligned(value, lock) __sync_fetch_and_sub(value, 1) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using GNU atomics" + #endif +#elif CYTHON_ATOMICS && defined(_MSC_VER) && 0 + #include + #undef __pyx_atomic_int_type + #define __pyx_atomic_int_type LONG + #define __pyx_atomic_incr_aligned(value, lock) InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #pragma message ("Using MSVC atomics") + #endif +#elif CYTHON_ATOMICS && (defined(__ICC) || defined(__INTEL_COMPILER)) && 0 + #define __pyx_atomic_incr_aligned(value, lock) _InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) _InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using Intel atomics" + #endif +#else + #undef CYTHON_ATOMICS + #define CYTHON_ATOMICS 0 + #ifdef __PYX_DEBUG_ATOMICS + #warning "Not using atomics" + #endif +#endif +typedef volatile __pyx_atomic_int_type __pyx_atomic_int; +#if CYTHON_ATOMICS + #define __pyx_add_acquisition_count(memview)\ + __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) +#else + #define __pyx_add_acquisition_count(memview)\ + __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) +#endif + +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* NoFastGil.proto */ +#define __Pyx_PyGILState_Ensure PyGILState_Ensure +#define __Pyx_PyGILState_Release PyGILState_Release +#define __Pyx_FastGIL_Remember() +#define __Pyx_FastGIL_Forget() +#define __Pyx_FastGilFuncInit() + +/* BufferFormatStructs.proto */ +#define IS_UNSIGNED(type) (((type) -1) > 0) +struct __Pyx_StructField_; +#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) +typedef struct { + const char* name; + struct __Pyx_StructField_* fields; + size_t size; + size_t arraysize[8]; + int ndim; + char typegroup; + char is_unsigned; + int flags; +} __Pyx_TypeInfo; +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + size_t new_count, enc_count; + size_t struct_alignment; + int is_complex; + char enc_type; + char new_packmode; + char enc_packmode; + char is_valid_array; +} __Pyx_BufFmt_Context; + + +/*--- Type declarations ---*/ +struct __pyx_obj_6common_15profile_classes_CosmicBase; +struct __pyx_obj_6common_15profile_classes_DensProfs; +struct __pyx_obj_6common_15profile_classes_DensShapeProfs; +struct __pyx_obj_6common_15profile_classes_DensProfsHDF5; +struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5; +struct __pyx_array_obj; +struct __pyx_MemviewEnum_obj; +struct __pyx_memoryview_obj; +struct __pyx_memoryviewslice_obj; + +/* "common/profile_classes.pyx":21 + * + * @cython.embedsignature(True) + * cdef class CosmicBase: # <<<<<<<<<<<<<< + * """ Parent class governing high-level cosmic shape calculations + * + */ +struct __pyx_obj_6common_15profile_classes_CosmicBase { + PyObject_HEAD + PyObject *SNAP; + float L_BOX; + double start_time; + __Pyx_memviewslice r200; + PyObject *CENTER; + float SAFE; + float MASS_UNIT; + int MIN_NUMBER_PTCS; +}; + + +/* "common/profile_classes.pyx":592 + * return + * + * cdef class DensProfs(CosmicBase): # <<<<<<<<<<<<<< + * """ Class for density profile calculations + * + */ +struct __pyx_obj_6common_15profile_classes_DensProfs { + struct __pyx_obj_6common_15profile_classes_CosmicBase __pyx_base; + __Pyx_memviewslice xyz; + __Pyx_memviewslice masses; + PyObject *idx_cat; +}; + + +/* "common/profile_classes.pyx":717 + * return + * + * cdef class DensShapeProfs(DensProfs): # <<<<<<<<<<<<<< + * """ Class for density profile and shape profile calculations + * + */ +struct __pyx_obj_6common_15profile_classes_DensShapeProfs { + struct __pyx_obj_6common_15profile_classes_DensProfs __pyx_base; + int D_LOGSTART; + int D_LOGEND; + int D_BINS; + float M_TOL; + int N_WALL; + int N_MIN; +}; + + +/* "common/profile_classes.pyx":918 + * return + * + * cdef class DensProfsHDF5(CosmicBase): # <<<<<<<<<<<<<< + * """ Class for density profile calculations for Gadget-style HDF5 data + * + */ +struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 { + struct __pyx_obj_6common_15profile_classes_CosmicBase __pyx_base; + PyObject *HDF5_SNAP_DEST; + PyObject *HDF5_GROUP_DEST; + int MIN_NUMBER_STAR_PTCS; + int SNAP_MAX; + int WANT_RVIR; +}; + + +/* "common/profile_classes.pyx":1075 + * return + * + * cdef class DensShapeProfsHDF5(DensProfsHDF5): # <<<<<<<<<<<<<< + * """ Class for density profile and shape profile calculations for Gadget-style HDF5 data + * + */ +struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 { + struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 __pyx_base; + int D_LOGSTART; + int D_LOGEND; + int D_BINS; + float M_TOL; + int N_WALL; + int N_MIN; +}; + + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ +struct __pyx_array_obj { + PyObject_HEAD + struct __pyx_vtabstruct_array *__pyx_vtab; + char *data; + Py_ssize_t len; + char *format; + int ndim; + Py_ssize_t *_shape; + Py_ssize_t *_strides; + Py_ssize_t itemsize; + PyObject *mode; + PyObject *_format; + void (*callback_free_data)(void *); + int free_data; + int dtype_is_object; +}; + + +/* "View.MemoryView":279 + * + * @cname('__pyx_MemviewEnum') + * cdef class Enum(object): # <<<<<<<<<<<<<< + * cdef object name + * def __init__(self, name): + */ +struct __pyx_MemviewEnum_obj { + PyObject_HEAD + PyObject *name; +}; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ +struct __pyx_memoryview_obj { + PyObject_HEAD + struct __pyx_vtabstruct_memoryview *__pyx_vtab; + PyObject *obj; + PyObject *_size; + PyObject *_array_interface; + PyThread_type_lock lock; + __pyx_atomic_int acquisition_count[2]; + __pyx_atomic_int *acquisition_count_aligned_p; + Py_buffer view; + int flags; + int dtype_is_object; + __Pyx_TypeInfo *typeinfo; +}; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ +struct __pyx_memoryviewslice_obj { + struct __pyx_memoryview_obj __pyx_base; + __Pyx_memviewslice from_slice; + PyObject *from_object; + PyObject *(*to_object_func)(char *); + int (*to_dtype_func)(char *, PyObject *); +}; + + + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ + +struct __pyx_vtabstruct_array { + PyObject *(*get_memview)(struct __pyx_array_obj *); +}; +static struct __pyx_vtabstruct_array *__pyx_vtabptr_array; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ + +struct __pyx_vtabstruct_memoryview { + char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *); + PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *); +}; +static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ + +struct __pyx_vtabstruct__memoryviewslice { + struct __pyx_vtabstruct_memoryview __pyx_base; +}; +static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallNoArg.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); +#else +#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) +#endif + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* MemviewSliceInit.proto */ +#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d +#define __Pyx_MEMVIEW_DIRECT 1 +#define __Pyx_MEMVIEW_PTR 2 +#define __Pyx_MEMVIEW_FULL 4 +#define __Pyx_MEMVIEW_CONTIG 8 +#define __Pyx_MEMVIEW_STRIDED 16 +#define __Pyx_MEMVIEW_FOLLOW 32 +#define __Pyx_IS_C_CONTIG 1 +#define __Pyx_IS_F_CONTIG 2 +static int __Pyx_init_memviewslice( + struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference); +static CYTHON_INLINE int __pyx_add_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +#define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p) +#define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview)) +#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) +#define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__) +static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int); + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* StrEquals.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals +#else +#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +#endif + +/* None.proto */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); + +/* UnaryNegOverflows.proto */ +#define UNARY_NEG_WOULD_OVERFLOW(x)\ + (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) + +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/ +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* 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_string.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, 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)); + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseNoneIterError.proto */ +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 +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) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +static CYTHON_UNUSED 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 +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) +#endif + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* ListExtend.proto */ +static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { +#if CYTHON_COMPILING_IN_CPYTHON + PyObject* none = _PyList_Extend((PyListObject*)L, v); + if (unlikely(!none)) + return -1; + Py_DECREF(none); + return 0; +#else + return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); +#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); + PyList_SET_ITEM(list, len, x); + __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 + +/* None.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); + +/* None.proto */ +static CYTHON_INLINE long __Pyx_div_long(long, long); + +/* CallNextTpTraverse.proto */ +static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse); + +/* CallNextTpClear.proto */ +static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_dealloc); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* SetupReduce.proto */ +static int __Pyx_setup_reduce(PyObject* type_obj); + +/* SetVTable.proto */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +#if PY_MAJOR_VERSION < 3 + static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); + static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else + #define __Pyx_GetBuffer PyObject_GetBuffer + #define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + + +/* BufferStructDeclare.proto */ +typedef struct { + Py_ssize_t shape, strides, suboffsets; +} __Pyx_Buf_DimInfo; +typedef struct { + size_t refcount; + Py_buffer pybuffer; +} __Pyx_Buffer; +typedef struct { + __Pyx_Buffer *rcbuffer; + char *data; + __Pyx_Buf_DimInfo diminfo[8]; +} __Pyx_LocalBuf_ND; + +/* MemviewSliceIsContig.proto */ +static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim); + +/* OverlappingSlices.proto */ +static int __pyx_slices_overlap(__Pyx_memviewslice *slice1, + __Pyx_memviewslice *slice2, + int ndim, size_t itemsize); + +/* Capsule.proto */ +static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +/* MemviewDtypeToObject.proto */ +static CYTHON_INLINE PyObject *__pyx_memview_get_float(const char *itemp); +static CYTHON_INLINE int __pyx_memview_set_float(const char *itemp, PyObject *obj); + +/* IsLittleEndian.proto */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); + +/* BufferFormatCheck.proto */ +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts); +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type); + +/* TypeInfoCompare.proto */ +static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b); + +/* MemviewSliceValidateAndInit.proto */ +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); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_float(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_float(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(PyObject *, int writable_flag); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* MemviewSliceCopyTemplate.proto */ +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); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *); + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/ +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/ +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ + +/* Module declarations from 'cython.view' */ + +/* Module declarations from 'cython' */ + +/* Module declarations from 'common.profile_classes' */ +static PyTypeObject *__pyx_ptype_6common_15profile_classes_CosmicBase = 0; +static PyTypeObject *__pyx_ptype_6common_15profile_classes_DensProfs = 0; +static PyTypeObject *__pyx_ptype_6common_15profile_classes_DensShapeProfs = 0; +static PyTypeObject *__pyx_ptype_6common_15profile_classes_DensProfsHDF5 = 0; +static PyTypeObject *__pyx_ptype_6common_15profile_classes_DensShapeProfsHDF5 = 0; +static PyTypeObject *__pyx_array_type = 0; +static PyTypeObject *__pyx_MemviewEnum_type = 0; +static PyTypeObject *__pyx_memoryview_type = 0; +static PyTypeObject *__pyx_memoryviewslice_type = 0; +static PyObject *generic = 0; +static PyObject *strided = 0; +static PyObject *indirect = 0; +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_6common_15profile_classes___pyx_unpickle_CosmicBase__set_state(struct __pyx_obj_6common_15profile_classes_CosmicBase *, PyObject *); /*proto*/ +static PyObject *__pyx_f_6common_15profile_classes___pyx_unpickle_DensProfs__set_state(struct __pyx_obj_6common_15profile_classes_DensProfs *, PyObject *); /*proto*/ +static PyObject *__pyx_f_6common_15profile_classes___pyx_unpickle_DensShapeProfs__set_state(struct __pyx_obj_6common_15profile_classes_DensShapeProfs *, PyObject *); /*proto*/ +static PyObject *__pyx_f_6common_15profile_classes___pyx_unpickle_DensProfsHDF5__set_state(struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *, PyObject *); /*proto*/ +static PyObject *__pyx_f_6common_15profile_classes___pyx_unpickle_DensShapeProfsHDF5__set_state(struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *, PyObject *); /*proto*/ +static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/ +static void *__pyx_align_pointer(void *, size_t); /*proto*/ +static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/ +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/ +static PyObject *_unellipsify(PyObject *, int); /*proto*/ +static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/ +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/ +static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/ +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/ +static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/ +static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/ +static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/ +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/ +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/ +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/ +static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/ +static int __pyx_memoryview_err(PyObject *, char *); /*proto*/ +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/ +static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/ +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_float = { "float", NULL, sizeof(float), { 0 }, 0, 'R', 0, 0 }; +#define __Pyx_MODULE_NAME "common.profile_classes" +extern int __pyx_module_is_main_common__profile_classes; +int __pyx_module_is_main_common__profile_classes = 0; + +/* Implementation of 'common.profile_classes' */ +static PyObject *__pyx_builtin_super; +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_MemoryError; +static PyObject *__pyx_builtin_enumerate; +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_Ellipsis; +static PyObject *__pyx_builtin_id; +static PyObject *__pyx_builtin_IndexError; +static const char __pyx_k_[] = ""; +static const char __pyx_k_O[] = "O"; +static const char __pyx_k_a[] = "a"; +static const char __pyx_k_b[] = "b"; +static const char __pyx_k_c[] = "c"; +static const char __pyx_k_dm[] = "dm"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_MPI[] = "MPI"; +static const char __pyx_k__20[] = "*"; +static const char __pyx_k_new[] = "__new__"; +static const char __pyx_k_obj[] = "obj"; +static const char __pyx_k_plt[] = "plt"; +static const char __pyx_k_xyz[] = "xyz"; +static const char __pyx_k_SNAP[] = "SNAP"; +static const char __pyx_k_base[] = "base"; +static const char __pyx_k_comm[] = "comm"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_init[] = "__init__"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mode[] = "mode"; +static const char __pyx_k_name[] = "name"; +static const char __pyx_k_ndim[] = "ndim"; +static const char __pyx_k_pack[] = "pack"; +static const char __pyx_k_r200[] = "r200"; +static const char __pyx_k_rank[] = "rank"; +static const char __pyx_k_size[] = "size"; +static const char __pyx_k_step[] = "step"; +static const char __pyx_k_stop[] = "stop"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_time[] = "time"; +static const char __pyx_k_ASCII[] = "ASCII"; +static const char __pyx_k_L_BOX[] = "L_BOX"; +static const char __pyx_k_M_TOL[] = "M_TOL"; +static const char __pyx_k_N_MIN[] = "N_MIN"; +static const char __pyx_k_class[] = "__class__"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_flags[] = "flags"; +static const char __pyx_k_inter[] = "inter"; +static const char __pyx_k_major[] = "major"; +static const char __pyx_k_minor[] = "minor"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_r200s[] = "r200s"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_shape[] = "shape"; +static const char __pyx_k_start[] = "start"; +static const char __pyx_k_super[] = "super"; +static const char __pyx_k_Axes3D[] = "Axes3D"; +static const char __pyx_k_CENTER[] = "CENTER"; +static const char __pyx_k_D_BINS[] = "D_BINS"; +static const char __pyx_k_N_WALL[] = "N_WALL"; +static const char __pyx_k_encode[] = "encode"; +static const char __pyx_k_format[] = "format"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_masses[] = "masses"; +static const char __pyx_k_method[] = "method"; +static const char __pyx_k_mpi4py[] = "mpi4py"; +static const char __pyx_k_name_2[] = "__name__"; +static const char __pyx_k_pickle[] = "pickle"; +static const char __pyx_k_pyplot[] = "pyplot"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_struct[] = "struct"; +static const char __pyx_k_suffix[] = "suffix"; +static const char __pyx_k_unpack[] = "unpack"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_velxyz[] = "velxyz"; +static const char __pyx_k_einasto[] = "einasto"; +static const char __pyx_k_fortran[] = "fortran"; +static const char __pyx_k_idx_cat[] = "idx_cat"; +static const char __pyx_k_memview[] = "memview"; +static const char __pyx_k_reduced[] = "reduced"; +static const char __pyx_k_CAT_DEST[] = "CAT_DEST"; +static const char __pyx_k_D_LOGEND[] = "D_LOGEND"; +static const char __pyx_k_Ellipsis[] = "Ellipsis"; +static const char __pyx_k_Get_rank[] = "Get_rank"; +static const char __pyx_k_Get_size[] = "Get_size"; +static const char __pyx_k_SNAP_MAX[] = "SNAP_MAX"; +static const char __pyx_k_VIZ_DEST[] = "VIZ_DEST"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_itemsize[] = "itemsize"; +static const char __pyx_k_obj_type[] = "obj_type"; +static const char __pyx_k_pyx_type[] = "__pyx_type"; +static const char __pyx_k_rcParams[] = "rcParams"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_DensProfs[] = "DensProfs"; +static const char __pyx_k_ROverR200[] = "ROverR200"; +static const char __pyx_k_TypeError[] = "TypeError"; +static const char __pyx_k_WANT_RVIR[] = "WANT_RVIR"; +static const char __pyx_k_enumerate[] = "enumerate"; +static const char __pyx_k_font_size[] = "font.size"; +static const char __pyx_k_frac_r200[] = "frac_r200"; +static const char __pyx_k_pyx_state[] = "__pyx_state"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_spherical[] = "spherical"; +static const char __pyx_k_COMM_WORLD[] = "COMM_WORLD"; +static const char __pyx_k_CosmicBase[] = "CosmicBase"; +static const char __pyx_k_D_LOGSTART[] = "D_LOGSTART"; +static const char __pyx_k_IndexError[] = "IndexError"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_dens_profs[] = "dens_profs"; +static const char __pyx_k_matplotlib[] = "matplotlib"; +static const char __pyx_k_pyx_result[] = "__pyx_result"; +static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; +static const char __pyx_k_MemoryError[] = "MemoryError"; +static const char __pyx_k_PickleError[] = "PickleError"; +static const char __pyx_k_default_rng[] = "default_rng"; +static const char __pyx_k_obj_numbers[] = "obj_numbers"; +static const char __pyx_k_shell_based[] = "shell_based"; +static const char __pyx_k_HIST_NB_BINS[] = "HIST_NB_BINS"; +static const char __pyx_k_numpy_random[] = "numpy.random"; +static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; +static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_DensProfsHDF5[] = "DensProfsHDF5"; +static const char __pyx_k_ROverR200_fit[] = "ROverR200_fit"; +static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_DensShapeProfs[] = "DensShapeProfs"; +static const char __pyx_k_FontProperties[] = "FontProperties"; +static const char __pyx_k_HDF5_SNAP_DEST[] = "HDF5_SNAP_DEST"; +static const char __pyx_k_dens_profs_fit[] = "dens_profs_fit"; +static const char __pyx_k_HDF5_GROUP_DEST[] = "HDF5_GROUP_DEST"; +static const char __pyx_k_MIN_NUMBER_PTCS[] = "MIN_NUMBER_PTCS"; +static const char __pyx_k_View_MemoryView[] = "View.MemoryView"; +static const char __pyx_k_allocate_buffer[] = "allocate_buffer"; +static const char __pyx_k_dtype_is_object[] = "dtype_is_object"; +static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_matplotlib_pyplot[] = "matplotlib.pyplot"; +static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum"; +static const char __pyx_k_DensShapeProfsHDF5[] = "DensShapeProfsHDF5"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_strided_and_direct[] = ""; +static const char __pyx_k_MIN_NUMBER_STAR_PTCS[] = "MIN_NUMBER_STAR_PTCS"; +static const char __pyx_k_mpl_toolkits_mplot3d[] = "mpl_toolkits.mplot3d"; +static const char __pyx_k_strided_and_indirect[] = ""; +static const char __pyx_k_contiguous_and_direct[] = ""; +static const char __pyx_k_MemoryView_of_r_object[] = ""; +static const char __pyx_k_common_profile_classes[] = "common.profile_classes"; +static const char __pyx_k_pyx_unpickle_DensProfs[] = "__pyx_unpickle_DensProfs"; +static const char __pyx_k_MemoryView_of_r_at_0x_x[] = ""; +static const char __pyx_k_contiguous_and_indirect[] = ""; +static const char __pyx_k_matplotlib_font_manager[] = "matplotlib.font_manager"; +static const char __pyx_k_pyx_unpickle_CosmicBase[] = "__pyx_unpickle_CosmicBase"; +static const char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'"; +static const char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d."; +static const char __pyx_k_pyx_unpickle_DensProfsHDF5[] = "__pyx_unpickle_DensProfsHDF5"; +static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array"; +static const char __pyx_k_pyx_unpickle_DensShapeProfs[] = "__pyx_unpickle_DensShapeProfs"; +static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data."; +static const char __pyx_k_pyx_unpickle_DensShapeProfsHDF[] = "__pyx_unpickle_DensShapeProfsHDF5"; +static const char __pyx_k_strided_and_direct_or_indirect[] = ""; +static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides"; +static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory."; +static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview"; +static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview"; +static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array"; +static const char __pyx_k_Incompatible_checksums_s_vs_0x00[] = "Incompatible checksums (%s vs 0x008ea9b = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))"; +static const char __pyx_k_Incompatible_checksums_s_vs_0x2f[] = "Incompatible checksums (%s vs 0x2fb46cd = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, r200, start_time))"; +static const char __pyx_k_Incompatible_checksums_s_vs_0x80[] = "Incompatible checksums (%s vs 0x80bcedb = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))"; +static const char __pyx_k_Incompatible_checksums_s_vs_0xb0[] = "Incompatible checksums (%s vs 0xb068931 = (name))"; +static const char __pyx_k_Incompatible_checksums_s_vs_0xbd[] = "Incompatible checksums (%s vs 0xbdc4b1f = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))"; +static const char __pyx_k_Incompatible_checksums_s_vs_0xc6[] = "Incompatible checksums (%s vs 0xc6de7a6 = (CENTER, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))"; +static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported"; +static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got %s"; +static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis %d)"; +static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object"; +static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension %d (got %d and %d)"; +static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__"; +static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides."; +static const char __pyx_k_xyz_shape_0_must_be_equal_to_mas[] = "xyz.shape[0] must be equal to masses.shape[0]"; +static PyObject *__pyx_kp_u_; +static PyObject *__pyx_n_s_ASCII; +static PyObject *__pyx_n_s_Axes3D; +static PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri; +static PyObject *__pyx_n_s_CAT_DEST; +static PyObject *__pyx_n_s_CENTER; +static PyObject *__pyx_n_s_COMM_WORLD; +static PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is; +static PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor; +static PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi; +static PyObject *__pyx_kp_s_Cannot_index_with_type_s; +static PyObject *__pyx_n_s_CosmicBase; +static PyObject *__pyx_n_s_D_BINS; +static PyObject *__pyx_n_s_D_LOGEND; +static PyObject *__pyx_n_s_D_LOGSTART; +static PyObject *__pyx_n_s_DensProfs; +static PyObject *__pyx_n_s_DensProfsHDF5; +static PyObject *__pyx_n_s_DensShapeProfs; +static PyObject *__pyx_n_s_DensShapeProfsHDF5; +static PyObject *__pyx_n_s_Ellipsis; +static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr; +static PyObject *__pyx_n_s_FontProperties; +static PyObject *__pyx_n_s_Get_rank; +static PyObject *__pyx_n_s_Get_size; +static PyObject *__pyx_n_s_HDF5_GROUP_DEST; +static PyObject *__pyx_n_s_HDF5_SNAP_DEST; +static PyObject *__pyx_n_s_HIST_NB_BINS; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x00; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x2f; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x80; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xb0; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xbd; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xc6; +static PyObject *__pyx_n_s_IndexError; +static PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte; +static PyObject *__pyx_kp_s_Invalid_mode_expected_c_or_fortr; +static PyObject *__pyx_kp_s_Invalid_shape_in_axis_d_d; +static PyObject *__pyx_n_s_L_BOX; +static PyObject *__pyx_n_s_MIN_NUMBER_PTCS; +static PyObject *__pyx_n_s_MIN_NUMBER_STAR_PTCS; +static PyObject *__pyx_n_s_MPI; +static PyObject *__pyx_n_s_M_TOL; +static PyObject *__pyx_n_s_MemoryError; +static PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x; +static PyObject *__pyx_kp_s_MemoryView_of_r_object; +static PyObject *__pyx_n_s_N_MIN; +static PyObject *__pyx_n_s_N_WALL; +static PyObject *__pyx_n_b_O; +static PyObject *__pyx_kp_s_Out_of_bounds_on_buffer_access_a; +static PyObject *__pyx_n_s_PickleError; +static PyObject *__pyx_n_s_ROverR200; +static PyObject *__pyx_n_s_ROverR200_fit; +static PyObject *__pyx_n_s_SNAP; +static PyObject *__pyx_n_s_SNAP_MAX; +static PyObject *__pyx_n_s_TypeError; +static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object; +static PyObject *__pyx_n_s_VIZ_DEST; +static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_n_s_View_MemoryView; +static PyObject *__pyx_n_s_WANT_RVIR; +static PyObject *__pyx_n_s__20; +static PyObject *__pyx_n_s_a; +static PyObject *__pyx_n_s_allocate_buffer; +static PyObject *__pyx_n_s_b; +static PyObject *__pyx_n_s_base; +static PyObject *__pyx_n_s_c; +static PyObject *__pyx_n_u_c; +static PyObject *__pyx_n_s_class; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_comm; +static PyObject *__pyx_n_s_common_profile_classes; +static PyObject *__pyx_kp_s_contiguous_and_direct; +static PyObject *__pyx_kp_s_contiguous_and_indirect; +static PyObject *__pyx_n_s_default_rng; +static PyObject *__pyx_n_s_dens_profs; +static PyObject *__pyx_n_s_dens_profs_fit; +static PyObject *__pyx_n_s_dict; +static PyObject *__pyx_n_u_dm; +static PyObject *__pyx_n_s_dtype_is_object; +static PyObject *__pyx_n_u_einasto; +static PyObject *__pyx_n_s_encode; +static PyObject *__pyx_n_s_enumerate; +static PyObject *__pyx_n_s_error; +static PyObject *__pyx_n_s_flags; +static PyObject *__pyx_kp_u_font_size; +static PyObject *__pyx_n_s_format; +static PyObject *__pyx_n_s_fortran; +static PyObject *__pyx_n_u_fortran; +static PyObject *__pyx_n_s_frac_r200; +static PyObject *__pyx_n_s_getstate; +static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi; +static PyObject *__pyx_n_s_id; +static PyObject *__pyx_n_s_idx_cat; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_init; +static PyObject *__pyx_n_s_inter; +static PyObject *__pyx_n_s_itemsize; +static PyObject *__pyx_kp_s_itemsize_0_for_cython_array; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_major; +static PyObject *__pyx_n_s_masses; +static PyObject *__pyx_n_s_matplotlib; +static PyObject *__pyx_n_s_matplotlib_font_manager; +static PyObject *__pyx_n_s_matplotlib_pyplot; +static PyObject *__pyx_n_s_memview; +static PyObject *__pyx_n_s_method; +static PyObject *__pyx_n_s_minor; +static PyObject *__pyx_n_s_mode; +static PyObject *__pyx_n_s_mpi4py; +static PyObject *__pyx_n_s_mpl_toolkits_mplot3d; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_name_2; +static PyObject *__pyx_n_s_ndim; +static PyObject *__pyx_n_s_new; +static PyObject *__pyx_kp_s_no_default___reduce___due_to_non; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_numpy; +static PyObject *__pyx_n_s_numpy_random; +static PyObject *__pyx_n_s_obj; +static PyObject *__pyx_n_s_obj_numbers; +static PyObject *__pyx_n_s_obj_type; +static PyObject *__pyx_n_s_pack; +static PyObject *__pyx_n_s_pickle; +static PyObject *__pyx_n_s_plt; +static PyObject *__pyx_n_s_pyplot; +static PyObject *__pyx_n_s_pyx_PickleError; +static PyObject *__pyx_n_s_pyx_checksum; +static PyObject *__pyx_n_s_pyx_getbuffer; +static PyObject *__pyx_n_s_pyx_result; +static PyObject *__pyx_n_s_pyx_state; +static PyObject *__pyx_n_s_pyx_type; +static PyObject *__pyx_n_s_pyx_unpickle_CosmicBase; +static PyObject *__pyx_n_s_pyx_unpickle_DensProfs; +static PyObject *__pyx_n_s_pyx_unpickle_DensProfsHDF5; +static PyObject *__pyx_n_s_pyx_unpickle_DensShapeProfs; +static PyObject *__pyx_n_s_pyx_unpickle_DensShapeProfsHDF; +static PyObject *__pyx_n_s_pyx_unpickle_Enum; +static PyObject *__pyx_n_s_pyx_vtable; +static PyObject *__pyx_n_s_r200; +static PyObject *__pyx_n_s_r200s; +static PyObject *__pyx_n_s_range; +static PyObject *__pyx_n_s_rank; +static PyObject *__pyx_n_s_rcParams; +static PyObject *__pyx_n_s_reduce; +static PyObject *__pyx_n_s_reduce_cython; +static PyObject *__pyx_n_s_reduce_ex; +static PyObject *__pyx_n_s_reduced; +static PyObject *__pyx_n_s_setstate; +static PyObject *__pyx_n_s_setstate_cython; +static PyObject *__pyx_n_s_shape; +static PyObject *__pyx_n_s_shell_based; +static PyObject *__pyx_n_s_size; +static PyObject *__pyx_n_s_spherical; +static PyObject *__pyx_n_s_start; +static PyObject *__pyx_n_s_step; +static PyObject *__pyx_n_s_stop; +static PyObject *__pyx_kp_s_strided_and_direct; +static PyObject *__pyx_kp_s_strided_and_direct_or_indirect; +static PyObject *__pyx_kp_s_strided_and_indirect; +static PyObject *__pyx_kp_s_stringsource; +static PyObject *__pyx_n_s_struct; +static PyObject *__pyx_n_s_suffix; +static PyObject *__pyx_n_s_super; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_time; +static PyObject *__pyx_kp_s_unable_to_allocate_array_data; +static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str; +static PyObject *__pyx_n_s_unpack; +static PyObject *__pyx_n_s_update; +static PyObject *__pyx_n_s_velxyz; +static PyObject *__pyx_n_s_xyz; +static PyObject *__pyx_kp_u_xyz_shape_0_must_be_equal_to_mas; +static int __pyx_pf_6common_15profile_classes_10CosmicBase___init__(struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, PyObject *__pyx_v_SNAP, float __pyx_v_L_BOX, int __pyx_v_MIN_NUMBER_PTCS, PyObject *__pyx_v_CENTER); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_2getR200s(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_4getMassesCentersBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_6getShapeCatLocalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_8getShapeCatGlobalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_10getShapeCatVelLocalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_12getShapeCatVelGlobalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_14dumpShapeCatLocalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED PyObject *__pyx_v_suffix, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_16dumpShapeCatGlobalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED PyObject *__pyx_v_suffix, CYTHON_UNUSED int __pyx_v_reduced); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_18dumpShapeVelCatLocalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED PyObject *__pyx_v_suffix, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_20dumpShapeVelCatGlobalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED PyObject *__pyx_v_suffix, CYTHON_UNUSED int __pyx_v_reduced); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_22plotShapeProfsBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_suffix); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_24plotLocalTHistBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_HIST_NB_BINS, CYTHON_UNUSED float __pyx_v_frac_r200, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_suffix); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_26plotGlobalTHistBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_HIST_NB_BINS, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_suffix); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_28getDensProfsBestFitsBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_profs, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED PyObject *__pyx_v_method); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_30getConcentrationsBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_profs, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED PyObject *__pyx_v_method); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_32getDensProfsSphDirectBinningBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_34getDensProfsEllDirectBinningBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_36getDensProfsKernelBasedBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_38getObjInfoBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_40__reduce_cython__(struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_42__setstate_cython__(struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_6common_15profile_classes_9DensProfs___init__(struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, __Pyx_memviewslice __pyx_v_xyz, __Pyx_memviewslice __pyx_v_masses, PyObject *__pyx_v_idx_cat, __Pyx_memviewslice __pyx_v_r200, PyObject *__pyx_v_SNAP, float __pyx_v_L_BOX, int __pyx_v_MIN_NUMBER_PTCS, PyObject *__pyx_v_CENTER); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_2getIdxCat(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_4getIdxCatSuffRes(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_6getMassesCenters(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_8getDensProfsDirectBinning(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED int __pyx_v_spherical); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_10getDensProfsKernelBased(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_12getDensProfsBestFits(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_method); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_14getConcentrations(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_method); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_16plotDensProfs(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_dens_profs_fit, CYTHON_UNUSED PyObject *__pyx_v_ROverR200_fit, CYTHON_UNUSED PyObject *__pyx_v_method, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_18__reduce_cython__(struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_20__setstate_cython__(struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_6common_15profile_classes_14DensShapeProfs___init__(struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, __Pyx_memviewslice __pyx_v_xyz, __Pyx_memviewslice __pyx_v_masses, PyObject *__pyx_v_idx_cat, __Pyx_memviewslice __pyx_v_r200, PyObject *__pyx_v_SNAP, float __pyx_v_L_BOX, int __pyx_v_MIN_NUMBER_PTCS, int __pyx_v_D_LOGSTART, int __pyx_v_D_LOGEND, int __pyx_v_D_BINS, float __pyx_v_M_TOL, int __pyx_v_N_WALL, int __pyx_v_N_MIN, PyObject *__pyx_v_CENTER); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_2getDensProfsDirectBinning(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED int __pyx_v_spherical, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_4getShapeCatLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_6getShapeCatGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_8vizLocalShapes(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_numbers, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_10vizGlobalShapes(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_numbers, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_12plotGlobalEpsHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_14plotLocalEpsHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_frac_r200, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_16plotLocalTHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED PyObject *__pyx_v_frac_r200, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_18plotGlobalTHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_20plotShapeProfs(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_22dumpShapeCatLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_24dumpShapeCatGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_26getObjInfo(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_28__reduce_cython__(struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_30__setstate_cython__(struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_6common_15profile_classes_13DensProfsHDF5___init__(struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, PyObject *__pyx_v_HDF5_SNAP_DEST, PyObject *__pyx_v_HDF5_GROUP_DEST, PyObject *__pyx_v_SNAP, int __pyx_v_SNAP_MAX, float __pyx_v_L_BOX, int __pyx_v_MIN_NUMBER_PTCS, int __pyx_v_MIN_NUMBER_STAR_PTCS, PyObject *__pyx_v_CENTER, int __pyx_v_WANT_RVIR); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_2getXYZMasses(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_4getVelXYZ(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_6getIdxCat(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_8getMassesCenters(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_10getDensProfsDirectBinning(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED int __pyx_v_spherical, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_12getDensProfsKernelBased(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_14getDensProfsBestFits(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_method, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_16getConcentrations(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_method, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_18plotDensProfs(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_dens_profs_fit, CYTHON_UNUSED PyObject *__pyx_v_ROverR200_fit, CYTHON_UNUSED PyObject *__pyx_v_method, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_20__reduce_cython__(struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_22__setstate_cython__(struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5___init__(struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, PyObject *__pyx_v_HDF5_SNAP_DEST, PyObject *__pyx_v_HDF5_GROUP_DEST, PyObject *__pyx_v_SNAP, int __pyx_v_SNAP_MAX, float __pyx_v_L_BOX, int __pyx_v_MIN_NUMBER_PTCS, int __pyx_v_MIN_NUMBER_STAR_PTCS, int __pyx_v_D_LOGSTART, int __pyx_v_D_LOGEND, int __pyx_v_D_BINS, float __pyx_v_M_TOL, int __pyx_v_N_WALL, int __pyx_v_N_MIN, PyObject *__pyx_v_CENTER, int __pyx_v_WANT_RVIR); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_2getDensProfsDirectBinning(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED int __pyx_v_spherical, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_4getShapeCatLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_6getShapeCatGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_8getShapeCatVelLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_10getShapeCatVelGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_12vizLocalShapes(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_numbers, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_14vizGlobalShapes(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_numbers, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_16plotGlobalEpsHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_18plotLocalEpsHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_frac_r200, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_20plotLocalTHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED PyObject *__pyx_v_frac_r200, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_22plotGlobalTHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_24plotShapeProfs(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_26dumpShapeCatLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_28dumpShapeCatGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_30dumpShapeVelCatLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_32dumpShapeVelCatGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_34getObjInfo(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_type); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_36__reduce_cython__(struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_38__setstate_cython__(struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes___pyx_unpickle_CosmicBase(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_2__pyx_unpickle_DensProfs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_4__pyx_unpickle_DensShapeProfs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_6__pyx_unpickle_DensProfsHDF5(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_6common_15profile_classes_8__pyx_unpickle_DensShapeProfsHDF5(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +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 */ +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */ +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */ +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +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 PyObject *__pyx_tp_new_6common_15profile_classes_CosmicBase(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_6common_15profile_classes_DensProfs(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_6common_15profile_classes_DensShapeProfs(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_6common_15profile_classes_DensProfsHDF5(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_6common_15profile_classes_DensShapeProfsHDF5(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*/ +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_1; +static PyObject *__pyx_int_13; +static PyObject *__pyx_int_584347; +static PyObject *__pyx_int_50022093; +static PyObject *__pyx_int_134991579; +static PyObject *__pyx_int_184977713; +static PyObject *__pyx_int_198986527; +static PyObject *__pyx_int_208529318; +static PyObject *__pyx_int_neg_1; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__4; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__6; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_tuple__8; +static PyObject *__pyx_tuple__9; +static PyObject *__pyx_slice__16; +static PyObject *__pyx_tuple__10; +static PyObject *__pyx_tuple__11; +static PyObject *__pyx_tuple__12; +static PyObject *__pyx_tuple__13; +static PyObject *__pyx_tuple__14; +static PyObject *__pyx_tuple__15; +static PyObject *__pyx_tuple__17; +static PyObject *__pyx_tuple__18; +static PyObject *__pyx_tuple__19; +static PyObject *__pyx_tuple__21; +static PyObject *__pyx_tuple__23; +static PyObject *__pyx_tuple__25; +static PyObject *__pyx_tuple__27; +static PyObject *__pyx_tuple__29; +static PyObject *__pyx_tuple__31; +static PyObject *__pyx_tuple__32; +static PyObject *__pyx_tuple__33; +static PyObject *__pyx_tuple__34; +static PyObject *__pyx_tuple__35; +static PyObject *__pyx_tuple__36; +static PyObject *__pyx_codeobj__22; +static PyObject *__pyx_codeobj__24; +static PyObject *__pyx_codeobj__26; +static PyObject *__pyx_codeobj__28; +static PyObject *__pyx_codeobj__30; +static PyObject *__pyx_codeobj__37; +/* Late includes */ + +/* "common/profile_classes.pyx":40 + * cdef int MIN_NUMBER_PTCS + * + * def __init__(self, str SNAP, float L_BOX, int MIN_NUMBER_PTCS, str CENTER): # <<<<<<<<<<<<<< + * """ + * :param SNAP: snapshot identifier, e.g. '024' + */ + +/* Python wrapper */ +static int __pyx_pw_6common_15profile_classes_10CosmicBase_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase___init__[] = "\n :param SNAP: snapshot identifier, e.g. '024'\n :type SNAP: string\n :param L_BOX: simulation box side length\n :type L_BOX: float, units: Mpc/h\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param CENTER: shape quantities will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str"; +#if CYTHON_COMPILING_IN_CPYTHON +struct wrapperbase __pyx_wrapperbase_6common_15profile_classes_10CosmicBase___init__; +#endif +static int __pyx_pw_6common_15profile_classes_10CosmicBase_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_SNAP = 0; + float __pyx_v_L_BOX; + int __pyx_v_MIN_NUMBER_PTCS; + PyObject *__pyx_v_CENTER = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_SNAP,&__pyx_n_s_L_BOX,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_CENTER,0}; + PyObject* values[4] = {0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_SNAP)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 1); __PYX_ERR(0, 40, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 2); __PYX_ERR(0, 40, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 3); __PYX_ERR(0, 40, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 40, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + } + __pyx_v_SNAP = ((PyObject*)values[0]); + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 40, __pyx_L3_error) + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 40, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[3]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 40, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_SNAP), (&PyUnicode_Type), 1, "SNAP", 1))) __PYX_ERR(0, 40, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 40, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase___init__(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_SNAP, __pyx_v_L_BOX, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_CENTER); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_6common_15profile_classes_10CosmicBase___init__(struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, PyObject *__pyx_v_SNAP, float __pyx_v_L_BOX, int __pyx_v_MIN_NUMBER_PTCS, PyObject *__pyx_v_CENTER) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + double __pyx_t_4; + __Pyx_memviewslice __pyx_t_5 = { 0, 0, { 0 }, { 0 }, { 0 } }; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "common/profile_classes.pyx":51 + * or 'com' (center of mass) of each halo + * :type CENTER: str""" + * self.SNAP = SNAP # <<<<<<<<<<<<<< + * self.L_BOX = L_BOX + * self.CENTER = CENTER + */ + __Pyx_INCREF(__pyx_v_SNAP); + __Pyx_GIVEREF(__pyx_v_SNAP); + __Pyx_GOTREF(__pyx_v_self->SNAP); + __Pyx_DECREF(__pyx_v_self->SNAP); + __pyx_v_self->SNAP = __pyx_v_SNAP; + + /* "common/profile_classes.pyx":52 + * :type CENTER: str""" + * self.SNAP = SNAP + * self.L_BOX = L_BOX # <<<<<<<<<<<<<< + * self.CENTER = CENTER + * self.MIN_NUMBER_PTCS = MIN_NUMBER_PTCS + */ + __pyx_v_self->L_BOX = __pyx_v_L_BOX; + + /* "common/profile_classes.pyx":53 + * self.SNAP = SNAP + * self.L_BOX = L_BOX + * self.CENTER = CENTER # <<<<<<<<<<<<<< + * self.MIN_NUMBER_PTCS = MIN_NUMBER_PTCS + * self.start_time = time.time() + */ + __Pyx_INCREF(__pyx_v_CENTER); + __Pyx_GIVEREF(__pyx_v_CENTER); + __Pyx_GOTREF(__pyx_v_self->CENTER); + __Pyx_DECREF(__pyx_v_self->CENTER); + __pyx_v_self->CENTER = __pyx_v_CENTER; + + /* "common/profile_classes.pyx":54 + * self.L_BOX = L_BOX + * self.CENTER = CENTER + * self.MIN_NUMBER_PTCS = MIN_NUMBER_PTCS # <<<<<<<<<<<<<< + * self.start_time = time.time() + * self.SAFE = 6 + */ + __pyx_v_self->MIN_NUMBER_PTCS = __pyx_v_MIN_NUMBER_PTCS; + + /* "common/profile_classes.pyx":55 + * self.CENTER = CENTER + * self.MIN_NUMBER_PTCS = MIN_NUMBER_PTCS + * self.start_time = time.time() # <<<<<<<<<<<<<< + * self.SAFE = 6 + * self.MASS_UNIT = 1e10 + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && 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_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_self->start_time = __pyx_t_4; + + /* "common/profile_classes.pyx":56 + * self.MIN_NUMBER_PTCS = MIN_NUMBER_PTCS + * self.start_time = time.time() + * self.SAFE = 6 # <<<<<<<<<<<<<< + * self.MASS_UNIT = 1e10 + * self.r200 = None + */ + __pyx_v_self->SAFE = 6.0; + + /* "common/profile_classes.pyx":57 + * self.start_time = time.time() + * self.SAFE = 6 + * self.MASS_UNIT = 1e10 # <<<<<<<<<<<<<< + * self.r200 = None + * + */ + __pyx_v_self->MASS_UNIT = 1e10; + + /* "common/profile_classes.pyx":58 + * self.SAFE = 6 + * self.MASS_UNIT = 1e10 + * self.r200 = None # <<<<<<<<<<<<<< + * + * def getR200s(self): + */ + __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 58, __pyx_L1_error) + __PYX_XDEC_MEMVIEW(&__pyx_v_self->r200, 0); + __pyx_v_self->r200 = __pyx_t_5; + __pyx_t_5.memview = NULL; + __pyx_t_5.data = NULL; + + /* "common/profile_classes.pyx":40 + * cdef int MIN_NUMBER_PTCS + * + * def __init__(self, str SNAP, float L_BOX, int MIN_NUMBER_PTCS, str CENTER): # <<<<<<<<<<<<<< + * """ + * :param SNAP: snapshot identifier, e.g. '024' + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1); + __Pyx_AddTraceback("common.profile_classes.CosmicBase.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":60 + * self.r200 = None + * + * def getR200s(self): # <<<<<<<<<<<<<< + * """ Get overdensity radii""" + * return + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_3getR200s(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_2getR200s[] = "CosmicBase.getR200s(self)\n Get overdensity radii"; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_3getR200s(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getR200s (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_2getR200s(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_2getR200s(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getR200s", 0); + + /* "common/profile_classes.pyx":62 + * def getR200s(self): + * """ Get overdensity radii""" + * return # <<<<<<<<<<<<<< + * + * def getMassesCentersBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":60 + * self.r200 = None + * + * def getR200s(self): # <<<<<<<<<<<<<< + * """ Get overdensity radii""" + * return + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":64 + * return + * + * def getMassesCentersBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS): # <<<<<<<<<<<<<< + * """ Calculate total mass and centers of objects + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_5getMassesCentersBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_4getMassesCentersBase[] = "CosmicBase.getMassesCentersBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS)\n Calculate total mass and centers of objects\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :return centers, m: centers and masses\n :rtype: (N,3) and (N,) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_5getMassesCentersBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getMassesCentersBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,0}; + PyObject* values[4] = {0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getMassesCentersBase", 1, 4, 4, 1); __PYX_ERR(0, 64, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getMassesCentersBase", 1, 4, 4, 2); __PYX_ERR(0, 64, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getMassesCentersBase", 1, 4, 4, 3); __PYX_ERR(0, 64, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMassesCentersBase") < 0)) __PYX_ERR(0, 64, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 64, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 64, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 64, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getMassesCentersBase", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 64, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.getMassesCentersBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_4getMassesCentersBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_4getMassesCentersBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getMassesCentersBase", 0); + + /* "common/profile_classes.pyx":77 + * :return centers, m: centers and masses + * :rtype: (N,3) and (N,) floats""" + * return # <<<<<<<<<<<<<< + * + * def getShapeCatLocalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, bint reduced, bint shell_based): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":64 + * return + * + * def getMassesCentersBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS): # <<<<<<<<<<<<<< + * """ Calculate total mass and centers of objects + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":79 + * return + * + * def getShapeCatLocalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Get all relevant local shape data + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_7getShapeCatLocalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_6getShapeCatLocalBase[] = "CosmicBase.getShapeCatLocalBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, bool reduced, bool shell_based)\n Get all relevant local shape data\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest minus 1 (i.e. number of bins)\n :type D_BINS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :return: d, q, s, minor, inter, major, obj_center, obj_m\n :rtype: 3 x (number_of_objs, D_BINS+1) float arrays, \n 3 x (number_of_objs, D_BINS+1, ""3) float arrays, \n (number_of_objs,3) float array, (number_of_objs,) float array\n "; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_7getShapeCatLocalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_D_LOGSTART; + CYTHON_UNUSED float __pyx_v_D_LOGEND; + CYTHON_UNUSED int __pyx_v_D_BINS; + CYTHON_UNUSED float __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatLocalBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_D_LOGSTART,&__pyx_n_s_D_LOGEND,&__pyx_n_s_D_BINS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, 1); __PYX_ERR(0, 79, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, 2); __PYX_ERR(0, 79, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, 3); __PYX_ERR(0, 79, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGSTART)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, 4); __PYX_ERR(0, 79, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGEND)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, 5); __PYX_ERR(0, 79, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, 6); __PYX_ERR(0, 79, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, 7); __PYX_ERR(0, 79, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, 8); __PYX_ERR(0, 79, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, 9); __PYX_ERR(0, 79, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, 10); __PYX_ERR(0, 79, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, 11); __PYX_ERR(0, 79, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getShapeCatLocalBase") < 0)) __PYX_ERR(0, 79, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 12) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 79, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 79, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 79, __pyx_L3_error) + __pyx_v_D_LOGSTART = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_D_LOGSTART == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 79, __pyx_L3_error) + __pyx_v_D_LOGEND = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_D_LOGEND == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 79, __pyx_L3_error) + __pyx_v_D_BINS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_D_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 79, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[7]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 79, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 79, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 79, __pyx_L3_error) + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 79, __pyx_L3_error) + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[11]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 79, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getShapeCatLocalBase", 1, 12, 12, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 79, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.getShapeCatLocalBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_6getShapeCatLocalBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_D_LOGSTART, __pyx_v_D_LOGEND, __pyx_v_D_BINS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_6getShapeCatLocalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatLocalBase", 0); + + /* "common/profile_classes.pyx":113 + * (number_of_objs,3) float array, (number_of_objs,) float array + * """ + * return # <<<<<<<<<<<<<< + * + * def getShapeCatGlobalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, bint reduced): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":79 + * return + * + * def getShapeCatLocalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Get all relevant local shape data + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":115 + * return + * + * def getShapeCatGlobalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, bint reduced): # <<<<<<<<<<<<<< + * """ Get all relevant global shape data + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_9getShapeCatGlobalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_8getShapeCatGlobalBase[] = "CosmicBase.getShapeCatGlobalBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, bool reduced)\n Get all relevant global shape data\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :return: d, q, s, minor, inter, major, obj_center, obj_m\n :rtype: 3 x (number_of_objs, D_BINS+1) float arrays, \n 3 x (number_of_objs, D_BINS+1, 3) float arrays, \n (number_of_objs,3) float array, (number_of_objs,) float array\n "; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_9getShapeCatGlobalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED int __pyx_v_reduced; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatGlobalBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_reduced,0}; + PyObject* values[8] = {0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatGlobalBase", 1, 8, 8, 1); __PYX_ERR(0, 115, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatGlobalBase", 1, 8, 8, 2); __PYX_ERR(0, 115, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatGlobalBase", 1, 8, 8, 3); __PYX_ERR(0, 115, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatGlobalBase", 1, 8, 8, 4); __PYX_ERR(0, 115, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatGlobalBase", 1, 8, 8, 5); __PYX_ERR(0, 115, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatGlobalBase", 1, 8, 8, 6); __PYX_ERR(0, 115, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatGlobalBase", 1, 8, 8, 7); __PYX_ERR(0, 115, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getShapeCatGlobalBase") < 0)) __PYX_ERR(0, 115, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 8) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 115, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 115, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error) + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[7]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getShapeCatGlobalBase", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 115, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.getShapeCatGlobalBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_8getShapeCatGlobalBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_reduced); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_8getShapeCatGlobalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatGlobalBase", 0); + + /* "common/profile_classes.pyx":141 + * (number_of_objs,3) float array, (number_of_objs,) float array + * """ + * return # <<<<<<<<<<<<<< + * + * def getShapeCatVelLocalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, bint reduced, bint shell_based): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":115 + * return + * + * def getShapeCatGlobalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, bint reduced): # <<<<<<<<<<<<<< + * """ Get all relevant global shape data + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":143 + * return + * + * def getShapeCatVelLocalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Get all relevant local velocity shape data + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_11getShapeCatVelLocalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_10getShapeCatVelLocalBase[] = "CosmicBase.getShapeCatVelLocalBase(self, float[:, :] xyz, float[:, :] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, bool reduced, bool shell_based)\n Get all relevant local velocity shape data\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param velxyz: velocity array\n :type velxyz: (N2,3) floats\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest minus 1 (i.e. number of bins)\n :type D_BINS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :return: d, q, s, minor, inter, major, obj_center, obj_m""\n :rtype: 3 x (number_of_objs, D_BINS+1) float arrays, \n 3 x (number_of_objs, D_BINS+1, 3) float arrays, \n (number_of_objs,3) float array, (number_of_objs,) float array\n "; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_11getShapeCatVelLocalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_D_LOGSTART; + CYTHON_UNUSED float __pyx_v_D_LOGEND; + CYTHON_UNUSED int __pyx_v_D_BINS; + CYTHON_UNUSED float __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatVelLocalBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_velxyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_D_LOGSTART,&__pyx_n_s_D_LOGEND,&__pyx_n_s_D_BINS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_velxyz)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 1); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 2); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 3); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 4); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGSTART)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 5); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGEND)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 6); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 7); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 8); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 9); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 10); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 11); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, 12); __PYX_ERR(0, 143, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getShapeCatVelLocalBase") < 0)) __PYX_ERR(0, 143, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 13) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_v_velxyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_velxyz.memview)) __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_v_idx_cat = values[3]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_v_D_LOGSTART = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_D_LOGSTART == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_v_D_LOGEND = __pyx_PyFloat_AsFloat(values[6]); if (unlikely((__pyx_v_D_LOGEND == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_v_D_BINS = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_D_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[8]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[10]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[11]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[12]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 143, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocalBase", 1, 13, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.getShapeCatVelLocalBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_10getShapeCatVelLocalBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_velxyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_D_LOGSTART, __pyx_v_D_LOGEND, __pyx_v_D_BINS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_10getShapeCatVelLocalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatVelLocalBase", 0); + + /* "common/profile_classes.pyx":179 + * (number_of_objs,3) float array, (number_of_objs,) float array + * """ + * return # <<<<<<<<<<<<<< + * + * def getShapeCatVelGlobalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, bint reduced): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":143 + * return + * + * def getShapeCatVelLocalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Get all relevant local velocity shape data + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_velxyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":181 + * return + * + * def getShapeCatVelGlobalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, bint reduced): # <<<<<<<<<<<<<< + * """ Get all relevant global velocity shape data + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_13getShapeCatVelGlobalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_12getShapeCatVelGlobalBase[] = "CosmicBase.getShapeCatVelGlobalBase(self, float[:, :] xyz, float[:, :] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, bool reduced)\n Get all relevant global velocity shape data\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param velxyz: velocity array\n :type velxyz: (N2,3) floats\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :return: d, q, s, minor, inter, major, obj_center, obj_m\n :rtype: 3 x (number_of_objs, D_BINS+1) float arrays, \n 3 x (number_of_objs, D_BINS+1, 3) float arrays, \n (number_of_objs,3) float array, (number_of_objs,) float array\n "; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_13getShapeCatVelGlobalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED int __pyx_v_reduced; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatVelGlobalBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_velxyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_reduced,0}; + PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_velxyz)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelGlobalBase", 1, 9, 9, 1); __PYX_ERR(0, 181, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelGlobalBase", 1, 9, 9, 2); __PYX_ERR(0, 181, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelGlobalBase", 1, 9, 9, 3); __PYX_ERR(0, 181, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelGlobalBase", 1, 9, 9, 4); __PYX_ERR(0, 181, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelGlobalBase", 1, 9, 9, 5); __PYX_ERR(0, 181, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelGlobalBase", 1, 9, 9, 6); __PYX_ERR(0, 181, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelGlobalBase", 1, 9, 9, 7); __PYX_ERR(0, 181, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getShapeCatVelGlobalBase", 1, 9, 9, 8); __PYX_ERR(0, 181, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getShapeCatVelGlobalBase") < 0)) __PYX_ERR(0, 181, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 9) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 181, __pyx_L3_error) + __pyx_v_velxyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_velxyz.memview)) __PYX_ERR(0, 181, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 181, __pyx_L3_error) + __pyx_v_idx_cat = values[3]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 181, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 181, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 181, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 181, __pyx_L3_error) + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 181, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getShapeCatVelGlobalBase", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 181, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.getShapeCatVelGlobalBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_12getShapeCatVelGlobalBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_velxyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_reduced); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_12getShapeCatVelGlobalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatVelGlobalBase", 0); + + /* "common/profile_classes.pyx":209 + * (number_of_objs,3) float array, (number_of_objs,) float array + * """ + * return # <<<<<<<<<<<<<< + * + * def dumpShapeCatLocalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced, bint shell_based): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":181 + * return + * + * def getShapeCatVelGlobalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, bint reduced): # <<<<<<<<<<<<<< + * """ Get all relevant global velocity shape data + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_velxyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":211 + * return + * + * def dumpShapeCatLocalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Dumps all relevant local shape data into ``CAT_DEST`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_15dumpShapeCatLocalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_14dumpShapeCatLocalBase[] = "CosmicBase.dumpShapeCatLocalBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, unicode CAT_DEST, unicode suffix, bool reduced, bool shell_based)\n Dumps all relevant local shape data into ``CAT_DEST``\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest minus 1 (i.e. number of bins)\n :type D_BINS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param CAT_DEST: catalogue destination\n :type CAT_DEST: string\n :param suffix: suffix for file names\n :type suffix: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be ru""n\n :type shell_based: boolean\n "; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_15dumpShapeCatLocalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_D_LOGSTART; + CYTHON_UNUSED float __pyx_v_D_LOGEND; + CYTHON_UNUSED int __pyx_v_D_BINS; + CYTHON_UNUSED float __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST = 0; + CYTHON_UNUSED PyObject *__pyx_v_suffix = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatLocalBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_D_LOGSTART,&__pyx_n_s_D_LOGEND,&__pyx_n_s_D_BINS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_CAT_DEST,&__pyx_n_s_suffix,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 1); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 2); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 3); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGSTART)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 4); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGEND)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 5); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 6); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 7); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 8); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 9); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CAT_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 10); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_suffix)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 11); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 12); __PYX_ERR(0, 211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, 13); __PYX_ERR(0, 211, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dumpShapeCatLocalBase") < 0)) __PYX_ERR(0, 211, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 14) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_v_D_LOGSTART = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_D_LOGSTART == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_v_D_LOGEND = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_D_LOGEND == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_v_D_BINS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_D_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[7]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_v_CAT_DEST = ((PyObject*)values[10]); + __pyx_v_suffix = ((PyObject*)values[11]); + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[12]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[13]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 211, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocalBase", 1, 14, 14, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 211, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.dumpShapeCatLocalBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CAT_DEST), (&PyUnicode_Type), 1, "CAT_DEST", 1))) __PYX_ERR(0, 211, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_suffix), (&PyUnicode_Type), 1, "suffix", 1))) __PYX_ERR(0, 211, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_14dumpShapeCatLocalBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_D_LOGSTART, __pyx_v_D_LOGEND, __pyx_v_D_BINS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_CAT_DEST, __pyx_v_suffix, __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_14dumpShapeCatLocalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED PyObject *__pyx_v_suffix, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatLocalBase", 0); + + /* "common/profile_classes.pyx":245 + * :type shell_based: boolean + * """ + * return # <<<<<<<<<<<<<< + * + * def dumpShapeCatGlobalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":211 + * return + * + * def dumpShapeCatLocalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Dumps all relevant local shape data into ``CAT_DEST`` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":247 + * return + * + * def dumpShapeCatGlobalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced): # <<<<<<<<<<<<<< + * """ Dumps all relevant global shape data into ``CAT_DEST`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_17dumpShapeCatGlobalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_16dumpShapeCatGlobalBase[] = "CosmicBase.dumpShapeCatGlobalBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, unicode CAT_DEST, unicode suffix, bool reduced)\n Dumps all relevant global shape data into ``CAT_DEST``\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param CAT_DEST: catalogue destination\n :type CAT_DEST: string\n :param suffix: suffix for file names\n :type suffix: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean"; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_17dumpShapeCatGlobalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST = 0; + CYTHON_UNUSED PyObject *__pyx_v_suffix = 0; + CYTHON_UNUSED int __pyx_v_reduced; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatGlobalBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_CAT_DEST,&__pyx_n_s_suffix,&__pyx_n_s_reduced,0}; + PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobalBase", 1, 10, 10, 1); __PYX_ERR(0, 247, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobalBase", 1, 10, 10, 2); __PYX_ERR(0, 247, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobalBase", 1, 10, 10, 3); __PYX_ERR(0, 247, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobalBase", 1, 10, 10, 4); __PYX_ERR(0, 247, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobalBase", 1, 10, 10, 5); __PYX_ERR(0, 247, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobalBase", 1, 10, 10, 6); __PYX_ERR(0, 247, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CAT_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobalBase", 1, 10, 10, 7); __PYX_ERR(0, 247, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_suffix)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobalBase", 1, 10, 10, 8); __PYX_ERR(0, 247, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobalBase", 1, 10, 10, 9); __PYX_ERR(0, 247, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dumpShapeCatGlobalBase") < 0)) __PYX_ERR(0, 247, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 10) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 247, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 247, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L3_error) + __pyx_v_CAT_DEST = ((PyObject*)values[7]); + __pyx_v_suffix = ((PyObject*)values[8]); + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 247, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobalBase", 1, 10, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 247, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.dumpShapeCatGlobalBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CAT_DEST), (&PyUnicode_Type), 1, "CAT_DEST", 1))) __PYX_ERR(0, 247, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_suffix), (&PyUnicode_Type), 1, "suffix", 1))) __PYX_ERR(0, 247, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_16dumpShapeCatGlobalBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_CAT_DEST, __pyx_v_suffix, __pyx_v_reduced); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_16dumpShapeCatGlobalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED PyObject *__pyx_v_suffix, CYTHON_UNUSED int __pyx_v_reduced) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatGlobalBase", 0); + + /* "common/profile_classes.pyx":272 + * :param reduced: whether or not reduced shape tensor (1/r^2 factor) + * :type reduced: boolean""" + * return # <<<<<<<<<<<<<< + * + * def dumpShapeVelCatLocalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced, bint shell_based): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":247 + * return + * + * def dumpShapeCatGlobalBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced): # <<<<<<<<<<<<<< + * """ Dumps all relevant global shape data into ``CAT_DEST`` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":274 + * return + * + * def dumpShapeVelCatLocalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Dumps all relevant local velocity shape data into ``CAT_DEST`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_19dumpShapeVelCatLocalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_18dumpShapeVelCatLocalBase[] = "CosmicBase.dumpShapeVelCatLocalBase(self, float[:, :] xyz, float[:, :] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, unicode CAT_DEST, unicode suffix, bool reduced, bool shell_based)\n Dumps all relevant local velocity shape data into ``CAT_DEST``\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param velxyz: velocity array\n :type velxyz: (N2,3) floats\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest minus 1 (i.e. number of bins)\n :type D_BINS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param CAT_DEST: catalogue destination\n :type CAT_DEST: string\n :param suffix: suffix for file names\n :type suffix: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type"" reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n "; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_19dumpShapeVelCatLocalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_D_LOGSTART; + CYTHON_UNUSED float __pyx_v_D_LOGEND; + CYTHON_UNUSED int __pyx_v_D_BINS; + CYTHON_UNUSED float __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST = 0; + CYTHON_UNUSED PyObject *__pyx_v_suffix = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeVelCatLocalBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_velxyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_D_LOGSTART,&__pyx_n_s_D_LOGEND,&__pyx_n_s_D_BINS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_CAT_DEST,&__pyx_n_s_suffix,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_velxyz)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 1); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 2); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 3); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 4); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGSTART)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 5); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGEND)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 6); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 7); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 8); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 9); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 10); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CAT_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 11); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_suffix)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 12); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 13); __PYX_ERR(0, 274, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, 14); __PYX_ERR(0, 274, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dumpShapeVelCatLocalBase") < 0)) __PYX_ERR(0, 274, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 15) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_v_velxyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_velxyz.memview)) __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_v_idx_cat = values[3]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_v_D_LOGSTART = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_D_LOGSTART == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_v_D_LOGEND = __pyx_PyFloat_AsFloat(values[6]); if (unlikely((__pyx_v_D_LOGEND == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_v_D_BINS = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_D_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[8]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[10]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_v_CAT_DEST = ((PyObject*)values[11]); + __pyx_v_suffix = ((PyObject*)values[12]); + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[13]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[14]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 274, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocalBase", 1, 15, 15, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 274, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.dumpShapeVelCatLocalBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CAT_DEST), (&PyUnicode_Type), 1, "CAT_DEST", 1))) __PYX_ERR(0, 274, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_suffix), (&PyUnicode_Type), 1, "suffix", 1))) __PYX_ERR(0, 274, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_18dumpShapeVelCatLocalBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_velxyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_D_LOGSTART, __pyx_v_D_LOGEND, __pyx_v_D_BINS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_CAT_DEST, __pyx_v_suffix, __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_18dumpShapeVelCatLocalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED PyObject *__pyx_v_suffix, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeVelCatLocalBase", 0); + + /* "common/profile_classes.pyx":310 + * :type shell_based: boolean + * """ + * return # <<<<<<<<<<<<<< + * + * def dumpShapeVelCatGlobalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":274 + * return + * + * def dumpShapeVelCatLocalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Dumps all relevant local velocity shape data into ``CAT_DEST`` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_velxyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":312 + * return + * + * def dumpShapeVelCatGlobalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced): # <<<<<<<<<<<<<< + * """ Dumps all relevant global velocity shape data into ``CAT_DEST`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_21dumpShapeVelCatGlobalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_20dumpShapeVelCatGlobalBase[] = "CosmicBase.dumpShapeVelCatGlobalBase(self, float[:, :] xyz, float[:, :] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, unicode CAT_DEST, unicode suffix, bool reduced)\n Dumps all relevant global velocity shape data into ``CAT_DEST``\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param velxyz: velocity array\n :type velxyz: (N2,3) floats\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest minus 1 (i.e. number of bins)\n :type D_BINS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param CAT_DEST: catalogue destination\n :type CAT_DEST: string\n :param suffix: suffix for file names\n :type suffix: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n "; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_21dumpShapeVelCatGlobalBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST = 0; + CYTHON_UNUSED PyObject *__pyx_v_suffix = 0; + CYTHON_UNUSED int __pyx_v_reduced; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeVelCatGlobalBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_velxyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_CAT_DEST,&__pyx_n_s_suffix,&__pyx_n_s_reduced,0}; + PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_velxyz)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobalBase", 1, 11, 11, 1); __PYX_ERR(0, 312, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobalBase", 1, 11, 11, 2); __PYX_ERR(0, 312, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobalBase", 1, 11, 11, 3); __PYX_ERR(0, 312, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobalBase", 1, 11, 11, 4); __PYX_ERR(0, 312, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobalBase", 1, 11, 11, 5); __PYX_ERR(0, 312, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobalBase", 1, 11, 11, 6); __PYX_ERR(0, 312, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobalBase", 1, 11, 11, 7); __PYX_ERR(0, 312, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CAT_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobalBase", 1, 11, 11, 8); __PYX_ERR(0, 312, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_suffix)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobalBase", 1, 11, 11, 9); __PYX_ERR(0, 312, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobalBase", 1, 11, 11, 10); __PYX_ERR(0, 312, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dumpShapeVelCatGlobalBase") < 0)) __PYX_ERR(0, 312, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 11) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 312, __pyx_L3_error) + __pyx_v_velxyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_velxyz.memview)) __PYX_ERR(0, 312, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 312, __pyx_L3_error) + __pyx_v_idx_cat = values[3]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 312, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 312, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 312, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 312, __pyx_L3_error) + __pyx_v_CAT_DEST = ((PyObject*)values[8]); + __pyx_v_suffix = ((PyObject*)values[9]); + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 312, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobalBase", 1, 11, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 312, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.dumpShapeVelCatGlobalBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CAT_DEST), (&PyUnicode_Type), 1, "CAT_DEST", 1))) __PYX_ERR(0, 312, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_suffix), (&PyUnicode_Type), 1, "suffix", 1))) __PYX_ERR(0, 312, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_20dumpShapeVelCatGlobalBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_velxyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_CAT_DEST, __pyx_v_suffix, __pyx_v_reduced); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_20dumpShapeVelCatGlobalBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_velxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED PyObject *__pyx_v_suffix, CYTHON_UNUSED int __pyx_v_reduced) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeVelCatGlobalBase", 0); + + /* "common/profile_classes.pyx":347 + * """ + * + * return # <<<<<<<<<<<<<< + * + * def plotShapeProfsBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str VIZ_DEST, bint reduced, bint shell_based, str suffix = ''): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":312 + * return + * + * def dumpShapeVelCatGlobalBase(self, float[:,:] xyz, float[:,:] velxyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, str CAT_DEST, str suffix, bint reduced): # <<<<<<<<<<<<<< + * """ Dumps all relevant global velocity shape data into ``CAT_DEST`` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_velxyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":349 + * return + * + * def plotShapeProfsBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str VIZ_DEST, bint reduced, bint shell_based, str suffix = ''): # <<<<<<<<<<<<<< + * """ Draws shape profiles, also mass bin-decomposed ones + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_23plotShapeProfsBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_22plotShapeProfsBase[] = "CosmicBase.plotShapeProfsBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, unicode VIZ_DEST, bool reduced, bool shell_based, unicode suffix=u'')\n Draws shape profiles, also mass bin-decomposed ones\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest minus 1 (i.e. number of bins)\n :type D_BINS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :param suffix: suffix for file ""names\n :type suffix: string\n "; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_23plotShapeProfsBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_D_LOGSTART; + CYTHON_UNUSED float __pyx_v_D_LOGEND; + CYTHON_UNUSED int __pyx_v_D_BINS; + CYTHON_UNUSED float __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + CYTHON_UNUSED PyObject *__pyx_v_suffix = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotShapeProfsBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_D_LOGSTART,&__pyx_n_s_D_LOGEND,&__pyx_n_s_D_BINS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,&__pyx_n_s_suffix,0}; + PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + values[13] = ((PyObject*)__pyx_kp_u_); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 1); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 2); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 3); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGSTART)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 4); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGEND)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 5); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 6); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 7); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 8); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 9); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 10); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 11); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, 12); __PYX_ERR(0, 349, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_suffix); + if (value) { values[13] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotShapeProfsBase") < 0)) __PYX_ERR(0, 349, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_v_D_LOGSTART = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_D_LOGSTART == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_v_D_LOGEND = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_D_LOGEND == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_v_D_BINS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_D_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[7]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_v_VIZ_DEST = ((PyObject*)values[10]); + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[11]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[12]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_v_suffix = ((PyObject*)values[13]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotShapeProfsBase", 0, 13, 14, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 349, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.plotShapeProfsBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 349, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_suffix), (&PyUnicode_Type), 1, "suffix", 1))) __PYX_ERR(0, 349, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_22plotShapeProfsBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_D_LOGSTART, __pyx_v_D_LOGEND, __pyx_v_D_BINS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_VIZ_DEST, __pyx_v_reduced, __pyx_v_shell_based, __pyx_v_suffix); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_22plotShapeProfsBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_suffix) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotShapeProfsBase", 0); + + /* "common/profile_classes.pyx":384 + * """ + * + * return # <<<<<<<<<<<<<< + * + * def plotLocalTHistBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str VIZ_DEST, int HIST_NB_BINS, float frac_r200, bint reduced, bint shell_based, str suffix = ''): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":349 + * return + * + * def plotShapeProfsBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str VIZ_DEST, bint reduced, bint shell_based, str suffix = ''): # <<<<<<<<<<<<<< + * """ Draws shape profiles, also mass bin-decomposed ones + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":386 + * return + * + * def plotLocalTHistBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str VIZ_DEST, int HIST_NB_BINS, float frac_r200, bint reduced, bint shell_based, str suffix = ''): # <<<<<<<<<<<<<< + * """ Plot a local-shape triaxiality histogram at a specified ellipsoidal depth of ``frac_r200`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_25plotLocalTHistBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_24plotLocalTHistBase[] = "CosmicBase.plotLocalTHistBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, unicode VIZ_DEST, int HIST_NB_BINS, float frac_r200, bool reduced, bool shell_based, unicode suffix=u'')\n Plot a local-shape triaxiality histogram at a specified ellipsoidal depth of ``frac_r200``\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest minus 1 (i.e. number of bins)\n :type D_BINS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param HIST_NB_BINS: number of histogram bins\n :type HIST_NB_BINS: int\n :param frac_r200: depth of objects to plot triaxiality, in units of R200\n :type frac_r200: float""\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :param suffix: suffix for file names\n :type suffix: string\n "; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_25plotLocalTHistBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_D_LOGSTART; + CYTHON_UNUSED float __pyx_v_D_LOGEND; + CYTHON_UNUSED int __pyx_v_D_BINS; + CYTHON_UNUSED float __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED int __pyx_v_HIST_NB_BINS; + CYTHON_UNUSED float __pyx_v_frac_r200; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + CYTHON_UNUSED PyObject *__pyx_v_suffix = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotLocalTHistBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_D_LOGSTART,&__pyx_n_s_D_LOGEND,&__pyx_n_s_D_BINS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_HIST_NB_BINS,&__pyx_n_s_frac_r200,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,&__pyx_n_s_suffix,0}; + PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + values[15] = ((PyObject*)__pyx_kp_u_); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 1); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 2); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 3); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGSTART)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 4); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGEND)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 5); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 6); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 7); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 8); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 9); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 10); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HIST_NB_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 11); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frac_r200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 12); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 13); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, 14); __PYX_ERR(0, 386, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_suffix); + if (value) { values[15] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotLocalTHistBase") < 0)) __PYX_ERR(0, 386, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_D_LOGSTART = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_D_LOGSTART == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_D_LOGEND = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_D_LOGEND == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_D_BINS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_D_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[7]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_VIZ_DEST = ((PyObject*)values[10]); + __pyx_v_HIST_NB_BINS = __Pyx_PyInt_As_int(values[11]); if (unlikely((__pyx_v_HIST_NB_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_frac_r200 = __pyx_PyFloat_AsFloat(values[12]); if (unlikely((__pyx_v_frac_r200 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[13]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[14]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_v_suffix = ((PyObject*)values[15]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotLocalTHistBase", 0, 15, 16, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 386, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.plotLocalTHistBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 386, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_suffix), (&PyUnicode_Type), 1, "suffix", 1))) __PYX_ERR(0, 386, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_24plotLocalTHistBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_D_LOGSTART, __pyx_v_D_LOGEND, __pyx_v_D_BINS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_VIZ_DEST, __pyx_v_HIST_NB_BINS, __pyx_v_frac_r200, __pyx_v_reduced, __pyx_v_shell_based, __pyx_v_suffix); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_24plotLocalTHistBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_D_LOGSTART, CYTHON_UNUSED float __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_HIST_NB_BINS, CYTHON_UNUSED float __pyx_v_frac_r200, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_suffix) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotLocalTHistBase", 0); + + /* "common/profile_classes.pyx":425 + * """ + * + * return # <<<<<<<<<<<<<< + * + * def plotGlobalTHistBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, str VIZ_DEST, int HIST_NB_BINS, bint reduced, str suffix = ''): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":386 + * return + * + * def plotLocalTHistBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float D_LOGSTART, float D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str VIZ_DEST, int HIST_NB_BINS, float frac_r200, bint reduced, bint shell_based, str suffix = ''): # <<<<<<<<<<<<<< + * """ Plot a local-shape triaxiality histogram at a specified ellipsoidal depth of ``frac_r200`` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":427 + * return + * + * def plotGlobalTHistBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, str VIZ_DEST, int HIST_NB_BINS, bint reduced, str suffix = ''): # <<<<<<<<<<<<<< + * """ Plot a global-shape triaxiality histogram + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_27plotGlobalTHistBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_26plotGlobalTHistBase[] = "CosmicBase.plotGlobalTHistBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, unicode VIZ_DEST, int HIST_NB_BINS, bool reduced, unicode suffix=u'')\n Plot a global-shape triaxiality histogram\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param HIST_NB_BINS: number of histogram bins\n :type HIST_NB_BINS: int\n :param suffix: suffix for file names\n :type suffix: string\n "; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_27plotGlobalTHistBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED int __pyx_v_HIST_NB_BINS; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED PyObject *__pyx_v_suffix = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotGlobalTHistBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_HIST_NB_BINS,&__pyx_n_s_reduced,&__pyx_n_s_suffix,0}; + PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0}; + values[10] = ((PyObject*)__pyx_kp_u_); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalTHistBase", 0, 10, 11, 1); __PYX_ERR(0, 427, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalTHistBase", 0, 10, 11, 2); __PYX_ERR(0, 427, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalTHistBase", 0, 10, 11, 3); __PYX_ERR(0, 427, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalTHistBase", 0, 10, 11, 4); __PYX_ERR(0, 427, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalTHistBase", 0, 10, 11, 5); __PYX_ERR(0, 427, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalTHistBase", 0, 10, 11, 6); __PYX_ERR(0, 427, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalTHistBase", 0, 10, 11, 7); __PYX_ERR(0, 427, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HIST_NB_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalTHistBase", 0, 10, 11, 8); __PYX_ERR(0, 427, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalTHistBase", 0, 10, 11, 9); __PYX_ERR(0, 427, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_suffix); + if (value) { values[10] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotGlobalTHistBase") < 0)) __PYX_ERR(0, 427, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 427, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 427, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 427, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 427, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 427, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 427, __pyx_L3_error) + __pyx_v_VIZ_DEST = ((PyObject*)values[7]); + __pyx_v_HIST_NB_BINS = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_HIST_NB_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 427, __pyx_L3_error) + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 427, __pyx_L3_error) + __pyx_v_suffix = ((PyObject*)values[10]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotGlobalTHistBase", 0, 10, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 427, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.plotGlobalTHistBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 427, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_suffix), (&PyUnicode_Type), 1, "suffix", 1))) __PYX_ERR(0, 427, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_26plotGlobalTHistBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_VIZ_DEST, __pyx_v_HIST_NB_BINS, __pyx_v_reduced, __pyx_v_suffix); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_26plotGlobalTHistBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_HIST_NB_BINS, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_suffix) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotGlobalTHistBase", 0); + + /* "common/profile_classes.pyx":454 + * """ + * + * return # <<<<<<<<<<<<<< + * + * def getDensProfsBestFitsBase(self, float[:,:] dens_profs, float[:] ROverR200, idx_cat, float[:] r200s, int MIN_NUMBER_PTCS, str method = 'einasto'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":427 + * return + * + * def plotGlobalTHistBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float M_TOL, int N_WALL, int N_MIN, str VIZ_DEST, int HIST_NB_BINS, bint reduced, str suffix = ''): # <<<<<<<<<<<<<< + * """ Plot a global-shape triaxiality histogram + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":456 + * return + * + * def getDensProfsBestFitsBase(self, float[:,:] dens_profs, float[:] ROverR200, idx_cat, float[:] r200s, int MIN_NUMBER_PTCS, str method = 'einasto'): # <<<<<<<<<<<<<< + * """ Get best-fit results for density profile fitting + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_29getDensProfsBestFitsBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_28getDensProfsBestFitsBase[] = "CosmicBase.getDensProfsBestFitsBase(self, float[:, :] dens_profs, float[:] ROverR200, idx_cat, float[:] r200s, int MIN_NUMBER_PTCS, unicode method=u'einasto')\n Get best-fit results for density profile fitting\n \n :param dens_profs: density profiles to be fit, in units of M_sun*h^2/(Mpc)**3\n :type dens_profs: (N3, r_res) floats\n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param r200s: R_200 radii of the parent halos\n :type r200s: (N1,) floats\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param method: string describing density profile model assumed for fitting\n :type method: string, either `einasto`, `alpha_beta_gamma`, `hernquist`, `nfw`\n :return: best-fits for each object, and normalized radii used to calculate best-fits\n :rtype: (N3, n) floats, where n is the number of free parameters in the model ``method``,\n and (r_res,) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_29getDensProfsBestFitsBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_profs = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED PyObject *__pyx_v_method = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsBestFitsBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dens_profs,&__pyx_n_s_ROverR200,&__pyx_n_s_idx_cat,&__pyx_n_s_r200s,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_method,0}; + PyObject* values[6] = {0,0,0,0,0,0}; + values[5] = ((PyObject*)__pyx_n_u_einasto); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_profs)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsBestFitsBase", 0, 5, 6, 1); __PYX_ERR(0, 456, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsBestFitsBase", 0, 5, 6, 2); __PYX_ERR(0, 456, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r200s)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsBestFitsBase", 0, 5, 6, 3); __PYX_ERR(0, 456, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsBestFitsBase", 0, 5, 6, 4); __PYX_ERR(0, 456, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method); + if (value) { values[5] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDensProfsBestFitsBase") < 0)) __PYX_ERR(0, 456, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_dens_profs = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dens_profs.memview)) __PYX_ERR(0, 456, __pyx_L3_error) + __pyx_v_ROverR200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ROverR200.memview)) __PYX_ERR(0, 456, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_r200s = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r200s.memview)) __PYX_ERR(0, 456, __pyx_L3_error) + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 456, __pyx_L3_error) + __pyx_v_method = ((PyObject*)values[5]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getDensProfsBestFitsBase", 0, 5, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 456, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.getDensProfsBestFitsBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyUnicode_Type), 1, "method", 1))) __PYX_ERR(0, 456, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_28getDensProfsBestFitsBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_dens_profs, __pyx_v_ROverR200, __pyx_v_idx_cat, __pyx_v_r200s, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_method); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_28getDensProfsBestFitsBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_profs, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED PyObject *__pyx_v_method) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsBestFitsBase", 0); + + /* "common/profile_classes.pyx":475 + * and (r_res,) floats""" + * + * return # <<<<<<<<<<<<<< + * + * def getConcentrationsBase(self, float[:,:] dens_profs, float[:] ROverR200, idx_cat, float[:] r200s, int MIN_NUMBER_PTCS, str method = 'einasto'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":456 + * return + * + * def getDensProfsBestFitsBase(self, float[:,:] dens_profs, float[:] ROverR200, idx_cat, float[:] r200s, int MIN_NUMBER_PTCS, str method = 'einasto'): # <<<<<<<<<<<<<< + * """ Get best-fit results for density profile fitting + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_dens_profs, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_ROverR200, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r200s, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":477 + * return + * + * def getConcentrationsBase(self, float[:,:] dens_profs, float[:] ROverR200, idx_cat, float[:] r200s, int MIN_NUMBER_PTCS, str method = 'einasto'): # <<<<<<<<<<<<<< + * """ Get best-fit concentration values of objects from density profile fitting + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_31getConcentrationsBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_30getConcentrationsBase[] = "CosmicBase.getConcentrationsBase(self, float[:, :] dens_profs, float[:] ROverR200, idx_cat, float[:] r200s, int MIN_NUMBER_PTCS, unicode method=u'einasto')\n Get best-fit concentration values of objects from density profile fitting\n \n :param dens_profs: density profiles to be fit, in units of M_sun*h^2/(Mpc)**3\n :type dens_profs: (N3, r_res) floats\n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param r200s: R_200 radii of the parent halos\n :type r200s: (N1,) floats\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param method: string describing density profile model assumed for fitting\n :type method: string, either `einasto`, `alpha_beta_gamma`, `hernquist`, `nfw`\n :return: best-fit concentration for each object\n :rtype: (N3,) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_31getConcentrationsBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_profs = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED PyObject *__pyx_v_method = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getConcentrationsBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dens_profs,&__pyx_n_s_ROverR200,&__pyx_n_s_idx_cat,&__pyx_n_s_r200s,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_method,0}; + PyObject* values[6] = {0,0,0,0,0,0}; + values[5] = ((PyObject*)__pyx_n_u_einasto); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_profs)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getConcentrationsBase", 0, 5, 6, 1); __PYX_ERR(0, 477, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getConcentrationsBase", 0, 5, 6, 2); __PYX_ERR(0, 477, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r200s)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getConcentrationsBase", 0, 5, 6, 3); __PYX_ERR(0, 477, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getConcentrationsBase", 0, 5, 6, 4); __PYX_ERR(0, 477, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method); + if (value) { values[5] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getConcentrationsBase") < 0)) __PYX_ERR(0, 477, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_dens_profs = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dens_profs.memview)) __PYX_ERR(0, 477, __pyx_L3_error) + __pyx_v_ROverR200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ROverR200.memview)) __PYX_ERR(0, 477, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_r200s = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r200s.memview)) __PYX_ERR(0, 477, __pyx_L3_error) + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 477, __pyx_L3_error) + __pyx_v_method = ((PyObject*)values[5]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getConcentrationsBase", 0, 5, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 477, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.getConcentrationsBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyUnicode_Type), 1, "method", 1))) __PYX_ERR(0, 477, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_30getConcentrationsBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_dens_profs, __pyx_v_ROverR200, __pyx_v_idx_cat, __pyx_v_r200s, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_method); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_30getConcentrationsBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_profs, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED PyObject *__pyx_v_method) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getConcentrationsBase", 0); + + /* "common/profile_classes.pyx":495 + * :rtype: (N3,) floats""" + * + * return # <<<<<<<<<<<<<< + * + * def getDensProfsSphDirectBinningBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":477 + * return + * + * def getConcentrationsBase(self, float[:,:] dens_profs, float[:] ROverR200, idx_cat, float[:] r200s, int MIN_NUMBER_PTCS, str method = 'einasto'): # <<<<<<<<<<<<<< + * """ Get best-fit concentration values of objects from density profile fitting + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_dens_profs, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_ROverR200, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r200s, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":497 + * return + * + * def getDensProfsSphDirectBinningBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200): # <<<<<<<<<<<<<< + * """ Get direct-binning-based spherically averaged density profiles + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_33getDensProfsSphDirectBinningBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_32getDensProfsSphDirectBinningBase[] = "CosmicBase.getDensProfsSphDirectBinningBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200)\n Get direct-binning-based spherically averaged density profiles\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :return: density profiles\n :rtype: (N2, r_res) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_33getDensProfsSphDirectBinningBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200 = { 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("getDensProfsSphDirectBinningBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_ROverR200,0}; + PyObject* values[5] = {0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsSphDirectBinningBase", 1, 5, 5, 1); __PYX_ERR(0, 497, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsSphDirectBinningBase", 1, 5, 5, 2); __PYX_ERR(0, 497, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsSphDirectBinningBase", 1, 5, 5, 3); __PYX_ERR(0, 497, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsSphDirectBinningBase", 1, 5, 5, 4); __PYX_ERR(0, 497, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDensProfsSphDirectBinningBase") < 0)) __PYX_ERR(0, 497, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 497, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 497, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 497, __pyx_L3_error) + __pyx_v_ROverR200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ROverR200.memview)) __PYX_ERR(0, 497, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getDensProfsSphDirectBinningBase", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 497, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.getDensProfsSphDirectBinningBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_32getDensProfsSphDirectBinningBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_ROverR200); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_32getDensProfsSphDirectBinningBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsSphDirectBinningBase", 0); + + /* "common/profile_classes.pyx":513 + * :rtype: (N2, r_res) floats""" + * + * return # <<<<<<<<<<<<<< + * + * def getDensProfsEllDirectBinningBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200, float[:,:] a, float[:,:] b, float[:,:] c, float[:,:,:] major, float[:,:,:] inter, float[:,:,:] minor): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":497 + * return + * + * def getDensProfsSphDirectBinningBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200): # <<<<<<<<<<<<<< + * """ Get direct-binning-based spherically averaged density profiles + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_ROverR200, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":515 + * return + * + * def getDensProfsEllDirectBinningBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200, float[:,:] a, float[:,:] b, float[:,:] c, float[:,:,:] major, float[:,:,:] inter, float[:,:,:] minor): # <<<<<<<<<<<<<< + * """ Get direct-binning-based ellipsoidal shell-based density profiles + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_35getDensProfsEllDirectBinningBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_34getDensProfsEllDirectBinningBase[] = "CosmicBase.getDensProfsEllDirectBinningBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200, float[:, :] a, float[:, :] b, float[:, :] c, float[:, :, :] major, float[:, :, :] inter, float[:, :, :] minor)\n Get direct-binning-based ellipsoidal shell-based density profiles\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param a: major axis eigenvalues\n :type a: (N1,D_BINS+1,) floats\n :param b: intermediate axis eigenvalues\n :type b: (N1,D_BINS+1,) floats\n :param c: minor axis eigenvalues\n :type c: (N1,D_BINS+1,) floats\n :param major: major axis eigenvectors\n :type major: (N1,D_BINS+1,3) floats\n :param inter: inter axis eigenvectors\n :type inter: (N1,D_BINS+1,3) floats\n :param minor: minor axis eigenvectors\n :type minor: (N1,D_BINS+1,3) floats\n :return: density profiles\n :rtype: (N2, r_res) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_35getDensProfsEllDirectBinningBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor = { 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("getDensProfsEllDirectBinningBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_ROverR200,&__pyx_n_s_a,&__pyx_n_s_b,&__pyx_n_s_c,&__pyx_n_s_major,&__pyx_n_s_inter,&__pyx_n_s_minor,0}; + PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsEllDirectBinningBase", 1, 11, 11, 1); __PYX_ERR(0, 515, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsEllDirectBinningBase", 1, 11, 11, 2); __PYX_ERR(0, 515, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsEllDirectBinningBase", 1, 11, 11, 3); __PYX_ERR(0, 515, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsEllDirectBinningBase", 1, 11, 11, 4); __PYX_ERR(0, 515, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_a)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsEllDirectBinningBase", 1, 11, 11, 5); __PYX_ERR(0, 515, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsEllDirectBinningBase", 1, 11, 11, 6); __PYX_ERR(0, 515, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsEllDirectBinningBase", 1, 11, 11, 7); __PYX_ERR(0, 515, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_major)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsEllDirectBinningBase", 1, 11, 11, 8); __PYX_ERR(0, 515, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsEllDirectBinningBase", 1, 11, 11, 9); __PYX_ERR(0, 515, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minor)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsEllDirectBinningBase", 1, 11, 11, 10); __PYX_ERR(0, 515, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDensProfsEllDirectBinningBase") < 0)) __PYX_ERR(0, 515, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 11) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 515, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 515, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 515, __pyx_L3_error) + __pyx_v_ROverR200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ROverR200.memview)) __PYX_ERR(0, 515, __pyx_L3_error) + __pyx_v_a = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_a.memview)) __PYX_ERR(0, 515, __pyx_L3_error) + __pyx_v_b = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_b.memview)) __PYX_ERR(0, 515, __pyx_L3_error) + __pyx_v_c = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_c.memview)) __PYX_ERR(0, 515, __pyx_L3_error) + __pyx_v_major = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_major.memview)) __PYX_ERR(0, 515, __pyx_L3_error) + __pyx_v_inter = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_inter.memview)) __PYX_ERR(0, 515, __pyx_L3_error) + __pyx_v_minor = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_minor.memview)) __PYX_ERR(0, 515, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getDensProfsEllDirectBinningBase", 1, 11, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 515, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.getDensProfsEllDirectBinningBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_34getDensProfsEllDirectBinningBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_ROverR200, __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_major, __pyx_v_inter, __pyx_v_minor); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_34getDensProfsEllDirectBinningBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsEllDirectBinningBase", 0); + + /* "common/profile_classes.pyx":543 + * :rtype: (N2, r_res) floats""" + * + * return # <<<<<<<<<<<<<< + * + * def getDensProfsKernelBasedBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":515 + * return + * + * def getDensProfsEllDirectBinningBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200, float[:,:] a, float[:,:] b, float[:,:] c, float[:,:,:] major, float[:,:,:] inter, float[:,:,:] minor): # <<<<<<<<<<<<<< + * """ Get direct-binning-based ellipsoidal shell-based density profiles + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_ROverR200, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_a, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_b, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_c, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_major, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_inter, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_minor, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":545 + * return + * + * def getDensProfsKernelBasedBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200): # <<<<<<<<<<<<<< + * """ Get kernel-based density profiles + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_37getDensProfsKernelBasedBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_36getDensProfsKernelBasedBase[] = "CosmicBase.getDensProfsKernelBasedBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200)\n Get kernel-based density profiles\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :return: density profiles\n :rtype: (N2, r_res) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_37getDensProfsKernelBasedBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200 = { 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("getDensProfsKernelBasedBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_ROverR200,0}; + PyObject* values[5] = {0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsKernelBasedBase", 1, 5, 5, 1); __PYX_ERR(0, 545, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsKernelBasedBase", 1, 5, 5, 2); __PYX_ERR(0, 545, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsKernelBasedBase", 1, 5, 5, 3); __PYX_ERR(0, 545, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsKernelBasedBase", 1, 5, 5, 4); __PYX_ERR(0, 545, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDensProfsKernelBasedBase") < 0)) __PYX_ERR(0, 545, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 545, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 545, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 545, __pyx_L3_error) + __pyx_v_ROverR200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ROverR200.memview)) __PYX_ERR(0, 545, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getDensProfsKernelBasedBase", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 545, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.getDensProfsKernelBasedBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_36getDensProfsKernelBasedBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_ROverR200); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_36getDensProfsKernelBasedBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsKernelBasedBase", 0); + + /* "common/profile_classes.pyx":561 + * :rtype: (N2, r_res) floats""" + * + * return # <<<<<<<<<<<<<< + * + * def getObjInfoBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, str obj_type): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":545 + * return + * + * def getDensProfsKernelBasedBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float[:] ROverR200): # <<<<<<<<<<<<<< + * """ Get kernel-based density profiles + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_ROverR200, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":563 + * return + * + * def getObjInfoBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, str obj_type): # <<<<<<<<<<<<<< + * """ Print basic info about the objects used for local shape estimation such as number of converged objects + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_39getObjInfoBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_38getObjInfoBase[] = "CosmicBase.getObjInfoBase(self, float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, unicode obj_type)\n Print basic info about the objects used for local shape estimation such as number of converged objects\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest minus 1 (i.e. number of bins)\n :type D_BINS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param obj_type: either 'dm', 'gx' or 'unspecified', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_39getObjInfoBase(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getObjInfoBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_obj_type,0}; + PyObject* values[5] = {0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getObjInfoBase", 1, 5, 5, 1); __PYX_ERR(0, 563, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getObjInfoBase", 1, 5, 5, 2); __PYX_ERR(0, 563, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getObjInfoBase", 1, 5, 5, 3); __PYX_ERR(0, 563, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getObjInfoBase", 1, 5, 5, 4); __PYX_ERR(0, 563, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getObjInfoBase") < 0)) __PYX_ERR(0, 563, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 563, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 563, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 563, __pyx_L3_error) + __pyx_v_obj_type = ((PyObject*)values[4]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getObjInfoBase", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 563, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.CosmicBase.getObjInfoBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 563, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_38getObjInfoBase(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_38getObjInfoBase(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getObjInfoBase", 0); + + /* "common/profile_classes.pyx":590 + * :param obj_type: either 'dm', 'gx' or 'unspecified', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * cdef class DensProfs(CosmicBase): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":563 + * return + * + * def getObjInfoBase(self, float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, str obj_type): # <<<<<<<<<<<<<< + * """ Print basic info about the objects used for local shape estimation such as number of converged objects + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __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_6common_15profile_classes_10CosmicBase_41__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_40__reduce_cython__[] = "CosmicBase.__reduce_cython__(self)"; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_41__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_40__reduce_cython__(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_40__reduce_cython__(struct __pyx_obj_6common_15profile_classes_CosmicBase *__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; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.CENTER, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.SAFE, self.SNAP, self.r200, self.start_time) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->L_BOX); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->MASS_UNIT); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->MIN_NUMBER_PTCS); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->SAFE); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely(!__pyx_v_self->r200.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 5, __pyx_L1_error)} + __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_self->r200, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyFloat_FromDouble(__pyx_v_self->start_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(8); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_self->CENTER); + __Pyx_GIVEREF(__pyx_v_self->CENTER); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_self->CENTER); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_t_4); + __Pyx_INCREF(__pyx_v_self->SNAP); + __Pyx_GIVEREF(__pyx_v_self->SNAP); + PyTuple_SET_ITEM(__pyx_t_7, 5, __pyx_v_self->SNAP); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_7, 6, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_7, 7, __pyx_t_6); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_7); + __pyx_t_7 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.CENTER, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.SAFE, self.SNAP, self.r200, self.start_time) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_7 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_v__dict = __pyx_t_7; + __pyx_t_7 = 0; + + /* "(tree fragment)":7 + * state = (self.CENTER, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.SAFE, self.SNAP, self.r200, self.start_time) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_8 = (__pyx_v__dict != Py_None); + __pyx_t_9 = (__pyx_t_8 != 0); + if (__pyx_t_9) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v__dict); + __pyx_t_6 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_6)); + __pyx_t_6 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.CENTER is not None or self.SNAP is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.CENTER, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.SAFE, self.SNAP, self.r200, self.start_time) + * _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.CENTER is not None or self.SNAP is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_CosmicBase, (type(self), 0x2fb46cd, None), state + */ + /*else*/ { + __pyx_t_8 = (__pyx_v_self->CENTER != ((PyObject*)Py_None)); + __pyx_t_10 = (__pyx_t_8 != 0); + if (!__pyx_t_10) { + } else { + __pyx_t_9 = __pyx_t_10; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_10 = (__pyx_v_self->SNAP != ((PyObject*)Py_None)); + __pyx_t_8 = (__pyx_t_10 != 0); + __pyx_t_9 = __pyx_t_8; + __pyx_L4_bool_binop_done:; + __pyx_v_use_setstate = __pyx_t_9; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.CENTER is not None or self.SNAP is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_CosmicBase, (type(self), 0x2fb46cd, None), state + * else: + */ + __pyx_t_9 = (__pyx_v_use_setstate != 0); + if (__pyx_t_9) { + + /* "(tree fragment)":13 + * use_setstate = self.CENTER is not None or self.SNAP is not None + * if use_setstate: + * return __pyx_unpickle_CosmicBase, (type(self), 0x2fb46cd, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_CosmicBase, (type(self), 0x2fb46cd, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_CosmicBase); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_50022093); + __Pyx_GIVEREF(__pyx_int_50022093); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_int_50022093); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_7, 2, Py_None); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_7); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.CENTER is not None or self.SNAP is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_CosmicBase, (type(self), 0x2fb46cd, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_CosmicBase, (type(self), 0x2fb46cd, None), state + * else: + * return __pyx_unpickle_CosmicBase, (type(self), 0x2fb46cd, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_CosmicBase__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_CosmicBase); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_50022093); + __Pyx_GIVEREF(__pyx_int_50022093); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_int_50022093); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_state); + __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7); + __pyx_t_5 = 0; + __pyx_t_7 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 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_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("common.profile_classes.CosmicBase.__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_CosmicBase, (type(self), 0x2fb46cd, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_CosmicBase__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_43__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static char __pyx_doc_6common_15profile_classes_10CosmicBase_42__setstate_cython__[] = "CosmicBase.__setstate_cython__(self, __pyx_state)"; +static PyObject *__pyx_pw_6common_15profile_classes_10CosmicBase_43__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_10CosmicBase_42__setstate_cython__(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_10CosmicBase_42__setstate_cython__(struct __pyx_obj_6common_15profile_classes_CosmicBase *__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__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_CosmicBase, (type(self), 0x2fb46cd, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_CosmicBase__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_6common_15profile_classes___pyx_unpickle_CosmicBase__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_CosmicBase, (type(self), 0x2fb46cd, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_CosmicBase__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("common.profile_classes.CosmicBase.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":604 + * cdef object idx_cat + * + * def __init__(self, float[:,:] xyz, float[:] masses, idx_cat, float[:] r200, str SNAP, float L_BOX, int MIN_NUMBER_PTCS, str CENTER): # <<<<<<<<<<<<<< + * """ + * :param xyz: positions of all simulation particles + */ + +/* Python wrapper */ +static int __pyx_pw_6common_15profile_classes_9DensProfs_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_9DensProfs___init__[] = "\n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param r200: R_200 radii of the parent halos\n :type r200: (N1,) floats\n :param SNAP: snapshot identifier, e.g. '024'\n :type SNAP: string\n :param L_BOX: simulation box side length\n :type L_BOX: float, units: Mpc/h\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param CENTER: shape quantities will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str"; +#if CYTHON_COMPILING_IN_CPYTHON +struct wrapperbase __pyx_wrapperbase_6common_15profile_classes_9DensProfs___init__; +#endif +static int __pyx_pw_6common_15profile_classes_9DensProfs_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyObject *__pyx_v_idx_cat = 0; + __Pyx_memviewslice __pyx_v_r200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyObject *__pyx_v_SNAP = 0; + float __pyx_v_L_BOX; + int __pyx_v_MIN_NUMBER_PTCS; + PyObject *__pyx_v_CENTER = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_r200,&__pyx_n_s_SNAP,&__pyx_n_s_L_BOX,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_CENTER,0}; + PyObject* values[8] = {0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 1); __PYX_ERR(0, 604, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 2); __PYX_ERR(0, 604, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 3); __PYX_ERR(0, 604, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_SNAP)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 4); __PYX_ERR(0, 604, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 5); __PYX_ERR(0, 604, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 6); __PYX_ERR(0, 604, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 7); __PYX_ERR(0, 604, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 604, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 8) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 604, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 604, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_r200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r200.memview)) __PYX_ERR(0, 604, __pyx_L3_error) + __pyx_v_SNAP = ((PyObject*)values[4]); + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 604, __pyx_L3_error) + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 604, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[7]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 604, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfs.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_SNAP), (&PyUnicode_Type), 1, "SNAP", 1))) __PYX_ERR(0, 604, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 604, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_9DensProfs___init__(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_r200, __pyx_v_SNAP, __pyx_v_L_BOX, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_CENTER); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_6common_15profile_classes_9DensProfs___init__(struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, __Pyx_memviewslice __pyx_v_xyz, __Pyx_memviewslice __pyx_v_masses, PyObject *__pyx_v_idx_cat, __Pyx_memviewslice __pyx_v_r200, PyObject *__pyx_v_SNAP, float __pyx_v_L_BOX, int __pyx_v_MIN_NUMBER_PTCS, PyObject *__pyx_v_CENTER) { + int __pyx_r; + __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; + PyObject *__pyx_t_7 = NULL; + __Pyx_memviewslice __pyx_t_8 = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_t_9 = { 0, 0, { 0 }, { 0 }, { 0 } }; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "common/profile_classes.pyx":623 + * or 'com' (center of mass) of each halo + * :type CENTER: str""" + * super().__init__(SNAP, L_BOX, MIN_NUMBER_PTCS, CENTER) # <<<<<<<<<<<<<< + * assert xyz.shape[0] == masses.shape[0], "xyz.shape[0] must be equal to masses.shape[0]" + * self.xyz = xyz.base + */ + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)__pyx_ptype_6common_15profile_classes_DensProfs)); + __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6common_15profile_classes_DensProfs)); + PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6common_15profile_classes_DensProfs)); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self)); + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_L_BOX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_MIN_NUMBER_PTCS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_6 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_v_SNAP, __pyx_t_3, __pyx_t_4, __pyx_v_CENTER}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_v_SNAP, __pyx_t_3, __pyx_t_4, __pyx_v_CENTER}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else + #endif + { + __pyx_t_7 = PyTuple_New(4+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (__pyx_t_5) { + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL; + } + __Pyx_INCREF(__pyx_v_SNAP); + __Pyx_GIVEREF(__pyx_v_SNAP); + PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_SNAP); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_t_4); + __Pyx_INCREF(__pyx_v_CENTER); + __Pyx_GIVEREF(__pyx_v_CENTER); + PyTuple_SET_ITEM(__pyx_t_7, 3+__pyx_t_6, __pyx_v_CENTER); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "common/profile_classes.pyx":624 + * :type CENTER: str""" + * super().__init__(SNAP, L_BOX, MIN_NUMBER_PTCS, CENTER) + * assert xyz.shape[0] == masses.shape[0], "xyz.shape[0] must be equal to masses.shape[0]" # <<<<<<<<<<<<<< + * self.xyz = xyz.base + * self.masses = masses.base + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(!Py_OptimizeFlag)) { + if (unlikely(!(((__pyx_v_xyz.shape[0]) == (__pyx_v_masses.shape[0])) != 0))) { + PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_xyz_shape_0_must_be_equal_to_mas); + __PYX_ERR(0, 624, __pyx_L1_error) + } + } + #endif + + /* "common/profile_classes.pyx":625 + * super().__init__(SNAP, L_BOX, MIN_NUMBER_PTCS, CENTER) + * assert xyz.shape[0] == masses.shape[0], "xyz.shape[0] must be equal to masses.shape[0]" + * self.xyz = xyz.base # <<<<<<<<<<<<<< + * self.masses = masses.base + * self.idx_cat = idx_cat + */ + __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_xyz, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 625, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 625, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 625, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v_self->xyz, 0); + __pyx_v_self->xyz = __pyx_t_8; + __pyx_t_8.memview = NULL; + __pyx_t_8.data = NULL; + + /* "common/profile_classes.pyx":626 + * assert xyz.shape[0] == masses.shape[0], "xyz.shape[0] must be equal to masses.shape[0]" + * self.xyz = xyz.base + * self.masses = masses.base # <<<<<<<<<<<<<< + * self.idx_cat = idx_cat + * self.r200 = r200.base + */ + __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_masses, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 626, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 626, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 626, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v_self->masses, 0); + __pyx_v_self->masses = __pyx_t_9; + __pyx_t_9.memview = NULL; + __pyx_t_9.data = NULL; + + /* "common/profile_classes.pyx":627 + * self.xyz = xyz.base + * self.masses = masses.base + * self.idx_cat = idx_cat # <<<<<<<<<<<<<< + * self.r200 = r200.base + * + */ + __Pyx_INCREF(__pyx_v_idx_cat); + __Pyx_GIVEREF(__pyx_v_idx_cat); + __Pyx_GOTREF(__pyx_v_self->idx_cat); + __Pyx_DECREF(__pyx_v_self->idx_cat); + __pyx_v_self->idx_cat = __pyx_v_idx_cat; + + /* "common/profile_classes.pyx":628 + * self.masses = masses.base + * self.idx_cat = idx_cat + * self.r200 = r200.base # <<<<<<<<<<<<<< + * + * def getIdxCat(self): + */ + __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_r200, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 628, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 628, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v_self->__pyx_base.r200, 0); + __pyx_v_self->__pyx_base.r200 = __pyx_t_9; + __pyx_t_9.memview = NULL; + __pyx_t_9.data = NULL; + + /* "common/profile_classes.pyx":604 + * cdef object idx_cat + * + * def __init__(self, float[:,:] xyz, float[:] masses, idx_cat, float[:] r200, str SNAP, float L_BOX, int MIN_NUMBER_PTCS, str CENTER): # <<<<<<<<<<<<<< + * """ + * :param xyz: positions of all simulation particles + */ + + /* function exit code */ + __pyx_r = 0; + 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_7); + __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1); + __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1); + __Pyx_AddTraceback("common.profile_classes.DensProfs.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r200, 1); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":630 + * self.r200 = r200.base + * + * def getIdxCat(self): # <<<<<<<<<<<<<< + * """ Fetch catalogue + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_3getIdxCat(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_6common_15profile_classes_9DensProfs_2getIdxCat[] = " Fetch catalogue\n \n :return cat: list of indices defining the objects\n :rtype: list of length N1, each consisting of a list of int indices"; +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_3getIdxCat(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getIdxCat (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_9DensProfs_2getIdxCat(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_2getIdxCat(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getIdxCat", 0); + + /* "common/profile_classes.pyx":635 + * :return cat: list of indices defining the objects + * :rtype: list of length N1, each consisting of a list of int indices""" + * return # <<<<<<<<<<<<<< + * + * def getIdxCatSuffRes(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":630 + * self.r200 = r200.base + * + * def getIdxCat(self): # <<<<<<<<<<<<<< + * """ Fetch catalogue + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":637 + * return + * + * def getIdxCatSuffRes(self): # <<<<<<<<<<<<<< + * """ Fetch catalogue, objects with insufficient resolution are set to empty list [] + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_5getIdxCatSuffRes(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_6common_15profile_classes_9DensProfs_4getIdxCatSuffRes[] = " Fetch catalogue, objects with insufficient resolution are set to empty list []\n \n :return cat: list of indices defining the objects\n :rtype: list of length N1, each consisting of a list of int indices"; +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_5getIdxCatSuffRes(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getIdxCatSuffRes (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_9DensProfs_4getIdxCatSuffRes(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_4getIdxCatSuffRes(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getIdxCatSuffRes", 0); + + /* "common/profile_classes.pyx":642 + * :return cat: list of indices defining the objects + * :rtype: list of length N1, each consisting of a list of int indices""" + * return # <<<<<<<<<<<<<< + * + * def getMassesCenters(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":637 + * return + * + * def getIdxCatSuffRes(self): # <<<<<<<<<<<<<< + * """ Fetch catalogue, objects with insufficient resolution are set to empty list [] + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":644 + * return + * + * def getMassesCenters(self): # <<<<<<<<<<<<<< + * """ Calculate total mass and centers of objects + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_7getMassesCenters(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_6common_15profile_classes_9DensProfs_6getMassesCenters[] = " Calculate total mass and centers of objects\n \n :return centers, m: centers and masses\n :rtype: (N,3) and (N,) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_7getMassesCenters(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getMassesCenters (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_9DensProfs_6getMassesCenters(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_6getMassesCenters(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getMassesCenters", 0); + + /* "common/profile_classes.pyx":649 + * :return centers, m: centers and masses + * :rtype: (N,3) and (N,) floats""" + * return # <<<<<<<<<<<<<< + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":644 + * return + * + * def getMassesCenters(self): # <<<<<<<<<<<<<< + * """ Calculate total mass and centers of objects + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":651 + * return + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True): # <<<<<<<<<<<<<< + * """ Get direct-binning-based density profiles + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_9getDensProfsDirectBinning(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_9DensProfs_8getDensProfsDirectBinning[] = " Get direct-binning-based density profiles\n \n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param spherical: whether or not spherical shell-based or ellipsoidal shell-based\n :type spherical: boolean\n :return: density profiles\n :rtype: (N2, r_res) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_9getDensProfsDirectBinning(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_ROverR200 = 0; + CYTHON_UNUSED int __pyx_v_spherical; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsDirectBinning (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ROverR200,&__pyx_n_s_spherical,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spherical); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDensProfsDirectBinning") < 0)) __PYX_ERR(0, 651, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_ROverR200 = values[0]; + if (values[1]) { + __pyx_v_spherical = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_spherical == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 651, __pyx_L3_error) + } else { + __pyx_v_spherical = ((int)1); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getDensProfsDirectBinning", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 651, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfs.getDensProfsDirectBinning", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_9DensProfs_8getDensProfsDirectBinning(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v_self), __pyx_v_ROverR200, __pyx_v_spherical); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_8getDensProfsDirectBinning(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED int __pyx_v_spherical) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsDirectBinning", 0); + + /* "common/profile_classes.pyx":660 + * :return: density profiles + * :rtype: (N2, r_res) floats""" + * return # <<<<<<<<<<<<<< + * + * def getDensProfsKernelBased(self, ROverR200): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":651 + * return + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True): # <<<<<<<<<<<<<< + * """ Get direct-binning-based density profiles + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":662 + * return + * + * def getDensProfsKernelBased(self, ROverR200): # <<<<<<<<<<<<<< + * """ Get kernel-based density profiles + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_11getDensProfsKernelBased(PyObject *__pyx_v_self, PyObject *__pyx_v_ROverR200); /*proto*/ +static char __pyx_doc_6common_15profile_classes_9DensProfs_10getDensProfsKernelBased[] = " Get kernel-based density profiles\n \n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :return: density profiles\n :rtype: (N2, r_res) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_11getDensProfsKernelBased(PyObject *__pyx_v_self, PyObject *__pyx_v_ROverR200) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsKernelBased (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_9DensProfs_10getDensProfsKernelBased(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v_self), ((PyObject *)__pyx_v_ROverR200)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_10getDensProfsKernelBased(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsKernelBased", 0); + + /* "common/profile_classes.pyx":669 + * :return: density profiles + * :rtype: (N2, r_res) floats""" + * return # <<<<<<<<<<<<<< + * + * def getDensProfsBestFits(self, dens_profs, ROverR200, str method): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":662 + * return + * + * def getDensProfsKernelBased(self, ROverR200): # <<<<<<<<<<<<<< + * """ Get kernel-based density profiles + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":671 + * return + * + * def getDensProfsBestFits(self, dens_profs, ROverR200, str method): # <<<<<<<<<<<<<< + * """ Get best-fit results for density profile fitting + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_13getDensProfsBestFits(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_9DensProfs_12getDensProfsBestFits[] = " Get best-fit results for density profile fitting\n \n :param dens_profs: density profiles to be fit, in units of M_sun*h^2/(Mpc)**3\n :type dens_profs: (N3, r_res) floats\n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param method: string describing density profile model assumed for fitting\n :type method: string, either `einasto`, `alpha_beta_gamma`, `hernquist`, `nfw`\n :return: best-fits for each object\n :rtype: (N3, n) floats, where n is the number of free parameters in the model ``method``"; +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_13getDensProfsBestFits(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_dens_profs = 0; + CYTHON_UNUSED PyObject *__pyx_v_ROverR200 = 0; + CYTHON_UNUSED PyObject *__pyx_v_method = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsBestFits (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dens_profs,&__pyx_n_s_ROverR200,&__pyx_n_s_method,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_profs)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsBestFits", 1, 3, 3, 1); __PYX_ERR(0, 671, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsBestFits", 1, 3, 3, 2); __PYX_ERR(0, 671, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDensProfsBestFits") < 0)) __PYX_ERR(0, 671, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v_dens_profs = values[0]; + __pyx_v_ROverR200 = values[1]; + __pyx_v_method = ((PyObject*)values[2]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getDensProfsBestFits", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 671, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfs.getDensProfsBestFits", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyUnicode_Type), 1, "method", 1))) __PYX_ERR(0, 671, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_9DensProfs_12getDensProfsBestFits(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v_self), __pyx_v_dens_profs, __pyx_v_ROverR200, __pyx_v_method); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_12getDensProfsBestFits(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_method) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsBestFits", 0); + + /* "common/profile_classes.pyx":682 + * :return: best-fits for each object + * :rtype: (N3, n) floats, where n is the number of free parameters in the model ``method``""" + * return # <<<<<<<<<<<<<< + * + * def getConcentrations(self, dens_profs, ROverR200, str method): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":671 + * return + * + * def getDensProfsBestFits(self, dens_profs, ROverR200, str method): # <<<<<<<<<<<<<< + * """ Get best-fit results for density profile fitting + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":684 + * return + * + * def getConcentrations(self, dens_profs, ROverR200, str method): # <<<<<<<<<<<<<< + * """ Get best-fit concentration values of objects from density profile fitting + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_15getConcentrations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_9DensProfs_14getConcentrations[] = " Get best-fit concentration values of objects from density profile fitting\n \n :param dens_profs: density profiles to be fit, in units of M_sun*h^2/(Mpc)**3\n :type dens_profs: (N3, r_res) floats\n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param method: string describing density profile model assumed for fitting\n :type method: string, either `einasto`, `alpha_beta_gamma`, `hernquist`, `nfw`\n :return: best-fit concentration for each object\n :rtype: (N3,) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_15getConcentrations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_dens_profs = 0; + CYTHON_UNUSED PyObject *__pyx_v_ROverR200 = 0; + CYTHON_UNUSED PyObject *__pyx_v_method = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getConcentrations (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dens_profs,&__pyx_n_s_ROverR200,&__pyx_n_s_method,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_profs)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getConcentrations", 1, 3, 3, 1); __PYX_ERR(0, 684, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getConcentrations", 1, 3, 3, 2); __PYX_ERR(0, 684, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getConcentrations") < 0)) __PYX_ERR(0, 684, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v_dens_profs = values[0]; + __pyx_v_ROverR200 = values[1]; + __pyx_v_method = ((PyObject*)values[2]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getConcentrations", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 684, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfs.getConcentrations", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyUnicode_Type), 1, "method", 1))) __PYX_ERR(0, 684, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_9DensProfs_14getConcentrations(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v_self), __pyx_v_dens_profs, __pyx_v_ROverR200, __pyx_v_method); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_14getConcentrations(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_method) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getConcentrations", 0); + + /* "common/profile_classes.pyx":695 + * :return: best-fit concentration for each object + * :rtype: (N3,) floats""" + * return # <<<<<<<<<<<<<< + * + * def plotDensProfs(self, dens_profs, ROverR200, dens_profs_fit, ROverR200_fit, str method, str VIZ_DEST): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":684 + * return + * + * def getConcentrations(self, dens_profs, ROverR200, str method): # <<<<<<<<<<<<<< + * """ Get best-fit concentration values of objects from density profile fitting + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":697 + * return + * + * def plotDensProfs(self, dens_profs, ROverR200, dens_profs_fit, ROverR200_fit, str method, str VIZ_DEST): # <<<<<<<<<<<<<< + * """ Draws some simplistic density profiles + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_17plotDensProfs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_9DensProfs_16plotDensProfs[] = " Draws some simplistic density profiles\n \n :param dens_profs: estimated density profiles, in units of M_sun*h^2/(Mpc)**3\n :type dens_profs: (N2, r_res) floats\n :param ROverR200: radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param dens_profs_fit: density profiles to be fit, in units of M_sun*h^2/(Mpc)**3\n :type dens_profs_fit: (N2, r_res2) floats\n :param ROverR200_fit: radii at which best-fits shall be calculated\n :type ROverR200_fit: (r_res2,) floats\n :param method: string describing density profile model assumed for fitting\n :type method: string, either `einasto`, `alpha_beta_gamma`, `hernquist`, `nfw`\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n "; +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_17plotDensProfs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_dens_profs = 0; + CYTHON_UNUSED PyObject *__pyx_v_ROverR200 = 0; + CYTHON_UNUSED PyObject *__pyx_v_dens_profs_fit = 0; + CYTHON_UNUSED PyObject *__pyx_v_ROverR200_fit = 0; + CYTHON_UNUSED PyObject *__pyx_v_method = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotDensProfs (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dens_profs,&__pyx_n_s_ROverR200,&__pyx_n_s_dens_profs_fit,&__pyx_n_s_ROverR200_fit,&__pyx_n_s_method,&__pyx_n_s_VIZ_DEST,0}; + PyObject* values[6] = {0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_profs)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 1, 6, 6, 1); __PYX_ERR(0, 697, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_profs_fit)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 1, 6, 6, 2); __PYX_ERR(0, 697, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200_fit)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 1, 6, 6, 3); __PYX_ERR(0, 697, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 1, 6, 6, 4); __PYX_ERR(0, 697, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 1, 6, 6, 5); __PYX_ERR(0, 697, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotDensProfs") < 0)) __PYX_ERR(0, 697, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + } + __pyx_v_dens_profs = values[0]; + __pyx_v_ROverR200 = values[1]; + __pyx_v_dens_profs_fit = values[2]; + __pyx_v_ROverR200_fit = values[3]; + __pyx_v_method = ((PyObject*)values[4]); + __pyx_v_VIZ_DEST = ((PyObject*)values[5]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 697, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfs.plotDensProfs", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyUnicode_Type), 1, "method", 1))) __PYX_ERR(0, 697, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 697, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_9DensProfs_16plotDensProfs(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v_self), __pyx_v_dens_profs, __pyx_v_ROverR200, __pyx_v_dens_profs_fit, __pyx_v_ROverR200_fit, __pyx_v_method, __pyx_v_VIZ_DEST); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_16plotDensProfs(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_dens_profs_fit, CYTHON_UNUSED PyObject *__pyx_v_ROverR200_fit, CYTHON_UNUSED PyObject *__pyx_v_method, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotDensProfs", 0); + + /* "common/profile_classes.pyx":715 + * :type obj_type: string + * """ + * return # <<<<<<<<<<<<<< + * + * cdef class DensShapeProfs(DensProfs): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":697 + * return + * + * def plotDensProfs(self, dens_profs, ROverR200, dens_profs_fit, ROverR200_fit, str method, str VIZ_DEST): # <<<<<<<<<<<<<< + * """ Draws some simplistic density profiles + * + */ + + /* function exit code */ + __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_6common_15profile_classes_9DensProfs_19__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_19__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_9DensProfs_18__reduce_cython__(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_18__reduce_cython__(struct __pyx_obj_6common_15profile_classes_DensProfs *__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; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + int __pyx_t_10; + int __pyx_t_11; + int __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.CENTER, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.SAFE, self.SNAP, self.idx_cat, self.masses, self.r200, self.start_time, self.xyz) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.L_BOX); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.MASS_UNIT); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx_base.MIN_NUMBER_PTCS); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.SAFE); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely(!__pyx_v_self->masses.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 5, __pyx_L1_error)} + __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_self->masses, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(!__pyx_v_self->__pyx_base.r200.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 5, __pyx_L1_error)} + __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_self->__pyx_base.r200, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.start_time); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (unlikely(!__pyx_v_self->xyz.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 5, __pyx_L1_error)} + __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v_self->xyz, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = PyTuple_New(11); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_INCREF(__pyx_v_self->__pyx_base.CENTER); + __Pyx_GIVEREF(__pyx_v_self->__pyx_base.CENTER); + PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_self->__pyx_base.CENTER); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_9, 4, __pyx_t_4); + __Pyx_INCREF(__pyx_v_self->__pyx_base.SNAP); + __Pyx_GIVEREF(__pyx_v_self->__pyx_base.SNAP); + PyTuple_SET_ITEM(__pyx_t_9, 5, __pyx_v_self->__pyx_base.SNAP); + __Pyx_INCREF(__pyx_v_self->idx_cat); + __Pyx_GIVEREF(__pyx_v_self->idx_cat); + PyTuple_SET_ITEM(__pyx_t_9, 6, __pyx_v_self->idx_cat); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_9, 7, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_9, 8, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_9, 9, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_9, 10, __pyx_t_8); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_8 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_9); + __pyx_t_9 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.CENTER, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.SAFE, self.SNAP, self.idx_cat, self.masses, self.r200, self.start_time, self.xyz) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_9 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_v__dict = __pyx_t_9; + __pyx_t_9 = 0; + + /* "(tree fragment)":7 + * state = (self.CENTER, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.SAFE, self.SNAP, self.idx_cat, self.masses, self.r200, self.start_time, self.xyz) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_10 = (__pyx_v__dict != Py_None); + __pyx_t_11 = (__pyx_t_10 != 0); + if (__pyx_t_11) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v__dict); + __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.CENTER is not None or self.SNAP is not None or self.idx_cat is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.CENTER, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.SAFE, self.SNAP, self.idx_cat, self.masses, self.r200, self.start_time, self.xyz) + * _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.CENTER is not None or self.SNAP is not None or self.idx_cat is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_DensProfs, (type(self), 0xbdc4b1f, None), state + */ + /*else*/ { + __pyx_t_10 = (__pyx_v_self->__pyx_base.CENTER != ((PyObject*)Py_None)); + __pyx_t_12 = (__pyx_t_10 != 0); + if (!__pyx_t_12) { + } else { + __pyx_t_11 = __pyx_t_12; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_12 = (__pyx_v_self->__pyx_base.SNAP != ((PyObject*)Py_None)); + __pyx_t_10 = (__pyx_t_12 != 0); + if (!__pyx_t_10) { + } else { + __pyx_t_11 = __pyx_t_10; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_10 = (__pyx_v_self->idx_cat != Py_None); + __pyx_t_12 = (__pyx_t_10 != 0); + __pyx_t_11 = __pyx_t_12; + __pyx_L4_bool_binop_done:; + __pyx_v_use_setstate = __pyx_t_11; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.CENTER is not None or self.SNAP is not None or self.idx_cat is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_DensProfs, (type(self), 0xbdc4b1f, None), state + * else: + */ + __pyx_t_11 = (__pyx_v_use_setstate != 0); + if (__pyx_t_11) { + + /* "(tree fragment)":13 + * use_setstate = self.CENTER is not None or self.SNAP is not None or self.idx_cat is not None + * if use_setstate: + * return __pyx_unpickle_DensProfs, (type(self), 0xbdc4b1f, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_DensProfs, (type(self), 0xbdc4b1f, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pyx_unpickle_DensProfs); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_198986527); + __Pyx_GIVEREF(__pyx_int_198986527); + PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_int_198986527); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_9, 2, Py_None); + __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_9); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_state); + __pyx_t_8 = 0; + __pyx_t_9 = 0; + __pyx_r = __pyx_t_7; + __pyx_t_7 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.CENTER is not None or self.SNAP is not None or self.idx_cat is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_DensProfs, (type(self), 0xbdc4b1f, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_DensProfs, (type(self), 0xbdc4b1f, None), state + * else: + * return __pyx_unpickle_DensProfs, (type(self), 0xbdc4b1f, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_DensProfs__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pyx_unpickle_DensProfs); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_198986527); + __Pyx_GIVEREF(__pyx_int_198986527); + PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_int_198986527); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_state); + __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_9); + __pyx_t_7 = 0; + __pyx_t_9 = 0; + __pyx_r = __pyx_t_8; + __pyx_t_8 = 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_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("common.profile_classes.DensProfs.__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_DensProfs, (type(self), 0xbdc4b1f, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_DensProfs__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_21__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_6common_15profile_classes_9DensProfs_21__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_9DensProfs_20__setstate_cython__(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_9DensProfs_20__setstate_cython__(struct __pyx_obj_6common_15profile_classes_DensProfs *__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__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_DensProfs, (type(self), 0xbdc4b1f, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_DensProfs__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_6common_15profile_classes___pyx_unpickle_DensProfs__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_DensProfs, (type(self), 0xbdc4b1f, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_DensProfs__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("common.profile_classes.DensProfs.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":732 + * cdef int N_MIN + * + * def __init__(self, float[:,:] xyz, float[:] masses, idx_cat, float[:] r200, str SNAP, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str CENTER): # <<<<<<<<<<<<<< + * """ + * :param xyz: positions of all simulation particles + */ + +/* Python wrapper */ +static int __pyx_pw_6common_15profile_classes_14DensShapeProfs_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs___init__[] = "\n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: each entry of the list is a list containing indices of particles belonging to an object\n :type idx_cat: list of length N1\n :param r200: R_200 radii of the parent halos\n :type r200: (N1,) floats\n :param SNAP: snapshot identifier, e.g. '024'\n :type SNAP: string\n :param L_BOX: simulation box side length\n :type L_BOX: float, units: Mpc/h\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest minus 1 (i.e. number of bins)\n :type D_BINS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param CENTER: shape quantities will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str"; +#if CYTHON_COMPILING_IN_CPYTHON +struct wrapperbase __pyx_wrapperbase_6common_15profile_classes_14DensShapeProfs___init__; +#endif +static int __pyx_pw_6common_15profile_classes_14DensShapeProfs_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyObject *__pyx_v_idx_cat = 0; + __Pyx_memviewslice __pyx_v_r200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyObject *__pyx_v_SNAP = 0; + float __pyx_v_L_BOX; + int __pyx_v_MIN_NUMBER_PTCS; + int __pyx_v_D_LOGSTART; + int __pyx_v_D_LOGEND; + int __pyx_v_D_BINS; + float __pyx_v_M_TOL; + int __pyx_v_N_WALL; + int __pyx_v_N_MIN; + PyObject *__pyx_v_CENTER = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_r200,&__pyx_n_s_SNAP,&__pyx_n_s_L_BOX,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_D_LOGSTART,&__pyx_n_s_D_LOGEND,&__pyx_n_s_D_BINS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_CENTER,0}; + PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 1); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 2); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 3); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_SNAP)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 4); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 5); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 6); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGSTART)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 7); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGEND)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 8); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 9); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 10); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 11); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 12); __PYX_ERR(0, 732, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, 13); __PYX_ERR(0, 732, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 732, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 14) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_r200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r200.memview)) __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_v_SNAP = ((PyObject*)values[4]); + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_v_D_LOGSTART = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_D_LOGSTART == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_v_D_LOGEND = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_D_LOGEND == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_v_D_BINS = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_D_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[10]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[11]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[12]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[13]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 14, 14, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 732, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_SNAP), (&PyUnicode_Type), 1, "SNAP", 1))) __PYX_ERR(0, 732, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 732, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs___init__(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_r200, __pyx_v_SNAP, __pyx_v_L_BOX, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_D_LOGSTART, __pyx_v_D_LOGEND, __pyx_v_D_BINS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_CENTER); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_6common_15profile_classes_14DensShapeProfs___init__(struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, __Pyx_memviewslice __pyx_v_xyz, __Pyx_memviewslice __pyx_v_masses, PyObject *__pyx_v_idx_cat, __Pyx_memviewslice __pyx_v_r200, PyObject *__pyx_v_SNAP, float __pyx_v_L_BOX, int __pyx_v_MIN_NUMBER_PTCS, int __pyx_v_D_LOGSTART, int __pyx_v_D_LOGEND, int __pyx_v_D_BINS, float __pyx_v_M_TOL, int __pyx_v_N_WALL, int __pyx_v_N_MIN, PyObject *__pyx_v_CENTER) { + int __pyx_r; + __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; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "common/profile_classes.pyx":765 + * or 'com' (center of mass) of each halo + * :type CENTER: str""" + * super().__init__(xyz.base, masses.base, idx_cat, r200.base, SNAP, L_BOX, MIN_NUMBER_PTCS, CENTER) # <<<<<<<<<<<<<< + * self.D_LOGSTART = D_LOGSTART + * self.D_LOGEND = D_LOGEND + */ + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)__pyx_ptype_6common_15profile_classes_DensShapeProfs)); + __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6common_15profile_classes_DensShapeProfs)); + PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6common_15profile_classes_DensShapeProfs)); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self)); + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_xyz, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_base); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_masses, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_base); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_r200, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_L_BOX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_MIN_NUMBER_PTCS); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_9 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[9] = {__pyx_t_8, __pyx_t_4, __pyx_t_5, __pyx_v_idx_cat, __pyx_t_6, __pyx_v_SNAP, __pyx_t_3, __pyx_t_7, __pyx_v_CENTER}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 8+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[9] = {__pyx_t_8, __pyx_t_4, __pyx_t_5, __pyx_v_idx_cat, __pyx_t_6, __pyx_v_SNAP, __pyx_t_3, __pyx_t_7, __pyx_v_CENTER}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 8+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } else + #endif + { + __pyx_t_10 = PyTuple_New(8+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (__pyx_t_8) { + __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL; + } + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5); + __Pyx_INCREF(__pyx_v_idx_cat); + __Pyx_GIVEREF(__pyx_v_idx_cat); + PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_v_idx_cat); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_9, __pyx_t_6); + __Pyx_INCREF(__pyx_v_SNAP); + __Pyx_GIVEREF(__pyx_v_SNAP); + PyTuple_SET_ITEM(__pyx_t_10, 4+__pyx_t_9, __pyx_v_SNAP); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_10, 5+__pyx_t_9, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_10, 6+__pyx_t_9, __pyx_t_7); + __Pyx_INCREF(__pyx_v_CENTER); + __Pyx_GIVEREF(__pyx_v_CENTER); + PyTuple_SET_ITEM(__pyx_t_10, 7+__pyx_t_9, __pyx_v_CENTER); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_3 = 0; + __pyx_t_7 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "common/profile_classes.pyx":766 + * :type CENTER: str""" + * super().__init__(xyz.base, masses.base, idx_cat, r200.base, SNAP, L_BOX, MIN_NUMBER_PTCS, CENTER) + * self.D_LOGSTART = D_LOGSTART # <<<<<<<<<<<<<< + * self.D_LOGEND = D_LOGEND + * self.D_BINS = D_BINS + */ + __pyx_v_self->D_LOGSTART = __pyx_v_D_LOGSTART; + + /* "common/profile_classes.pyx":767 + * super().__init__(xyz.base, masses.base, idx_cat, r200.base, SNAP, L_BOX, MIN_NUMBER_PTCS, CENTER) + * self.D_LOGSTART = D_LOGSTART + * self.D_LOGEND = D_LOGEND # <<<<<<<<<<<<<< + * self.D_BINS = D_BINS + * self.M_TOL = M_TOL + */ + __pyx_v_self->D_LOGEND = __pyx_v_D_LOGEND; + + /* "common/profile_classes.pyx":768 + * self.D_LOGSTART = D_LOGSTART + * self.D_LOGEND = D_LOGEND + * self.D_BINS = D_BINS # <<<<<<<<<<<<<< + * self.M_TOL = M_TOL + * self.N_WALL = N_WALL + */ + __pyx_v_self->D_BINS = __pyx_v_D_BINS; + + /* "common/profile_classes.pyx":769 + * self.D_LOGEND = D_LOGEND + * self.D_BINS = D_BINS + * self.M_TOL = M_TOL # <<<<<<<<<<<<<< + * self.N_WALL = N_WALL + * self.N_MIN = N_MIN + */ + __pyx_v_self->M_TOL = __pyx_v_M_TOL; + + /* "common/profile_classes.pyx":770 + * self.D_BINS = D_BINS + * self.M_TOL = M_TOL + * self.N_WALL = N_WALL # <<<<<<<<<<<<<< + * self.N_MIN = N_MIN + * + */ + __pyx_v_self->N_WALL = __pyx_v_N_WALL; + + /* "common/profile_classes.pyx":771 + * self.M_TOL = M_TOL + * self.N_WALL = N_WALL + * self.N_MIN = N_MIN # <<<<<<<<<<<<<< + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True, bint reduced = False, bint shell_based = False): + */ + __pyx_v_self->N_MIN = __pyx_v_N_MIN; + + /* "common/profile_classes.pyx":732 + * cdef int N_MIN + * + * def __init__(self, float[:,:] xyz, float[:] masses, idx_cat, float[:] r200, str SNAP, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str CENTER): # <<<<<<<<<<<<<< + * """ + * :param xyz: positions of all simulation particles + */ + + /* function exit code */ + __pyx_r = 0; + 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_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r200, 1); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":773 + * self.N_MIN = N_MIN + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Get direct-binning-based density profiles + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_3getDensProfsDirectBinning(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_2getDensProfsDirectBinning[] = " Get direct-binning-based density profiles\n \n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param spherical: whether or not spherical shell-based or ellipsoidal shell-based\n :type spherical: boolean\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :return: density profiles\n :rtype: (N2, r_res) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_3getDensProfsDirectBinning(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_ROverR200 = 0; + CYTHON_UNUSED int __pyx_v_spherical; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsDirectBinning (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ROverR200,&__pyx_n_s_spherical,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[4] = {0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spherical); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[3] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDensProfsDirectBinning") < 0)) __PYX_ERR(0, 773, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_ROverR200 = values[0]; + if (values[1]) { + __pyx_v_spherical = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_spherical == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 773, __pyx_L3_error) + } else { + __pyx_v_spherical = ((int)1); + } + if (values[2]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 773, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[3]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 773, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getDensProfsDirectBinning", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 773, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.getDensProfsDirectBinning", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_2getDensProfsDirectBinning(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_ROverR200, __pyx_v_spherical, __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_2getDensProfsDirectBinning(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED int __pyx_v_spherical, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsDirectBinning", 0); + + /* "common/profile_classes.pyx":786 + * :return: density profiles + * :rtype: (N2, r_res) floats""" + * return # <<<<<<<<<<<<<< + * + * def getShapeCatLocal(self, bint reduced = False, bint shell_based = False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":773 + * self.N_MIN = N_MIN + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Get direct-binning-based density profiles + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":788 + * return + * + * def getShapeCatLocal(self, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Get all relevant local shape data + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_5getShapeCatLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_4getShapeCatLocal[] = " Get all relevant local shape data\n \n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :return: d, q, s, minor, inter, major, obj_center, obj_m\n :rtype: 3 x (number_of_objs, D_BINS+1) float arrays, \n 3 x (number_of_objs, D_BINS+1, 3) float arrays, \n (number_of_objs,3) float array, (number_of_objs,) float array"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_5getShapeCatLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatLocal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[0] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getShapeCatLocal") < 0)) __PYX_ERR(0, 788, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + if (values[0]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 788, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[1]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 788, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getShapeCatLocal", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 788, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.getShapeCatLocal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_4getShapeCatLocal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_4getShapeCatLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatLocal", 0); + + /* "common/profile_classes.pyx":799 + * 3 x (number_of_objs, D_BINS+1, 3) float arrays, + * (number_of_objs,3) float array, (number_of_objs,) float array""" + * return # <<<<<<<<<<<<<< + * + * def getShapeCatGlobal(self, bint reduced = False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":788 + * return + * + * def getShapeCatLocal(self, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Get all relevant local shape data + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":801 + * return + * + * def getShapeCatGlobal(self, bint reduced = False): # <<<<<<<<<<<<<< + * """ Get all relevant global shape data + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_7getShapeCatGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_6getShapeCatGlobal[] = " Get all relevant global shape data\n \n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :return: d, q, s, minor, inter, major, obj_center, obj_m\n :rtype: 3 x (number_of_objs, D_BINS+1) float arrays, \n 3 x (number_of_objs, D_BINS+1, 3) float arrays, \n (number_of_objs,3) float array, (number_of_objs,) float array,\n "; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_7getShapeCatGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED int __pyx_v_reduced; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatGlobal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_reduced,0}; + PyObject* values[1] = {0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[0] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getShapeCatGlobal") < 0)) __PYX_ERR(0, 801, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + if (values[0]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 801, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getShapeCatGlobal", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 801, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.getShapeCatGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_6getShapeCatGlobal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_reduced); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_6getShapeCatGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatGlobal", 0); + + /* "common/profile_classes.pyx":811 + * (number_of_objs,3) float array, (number_of_objs,) float array, + * """ + * return # <<<<<<<<<<<<<< + * + * def vizLocalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False, bint shell_based = False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":801 + * return + * + * def getShapeCatGlobal(self, bint reduced = False): # <<<<<<<<<<<<<< + * """ Get all relevant global shape data + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":813 + * return + * + * def vizLocalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Visualize local shape of objects with numbers ``obj_numbers`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_9vizLocalShapes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_8vizLocalShapes[] = " Visualize local shape of objects with numbers ``obj_numbers``\n \n :param obj_numbers: list of object indices for which to visualize local shapes\n :type obj_numbers: list of int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: strings\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_9vizLocalShapes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_obj_numbers = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("vizLocalShapes (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj_numbers,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[4] = {0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_numbers)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("vizLocalShapes", 0, 2, 4, 1); __PYX_ERR(0, 813, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[3] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "vizLocalShapes") < 0)) __PYX_ERR(0, 813, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj_numbers = values[0]; + __pyx_v_VIZ_DEST = ((PyObject*)values[1]); + if (values[2]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 813, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[3]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 813, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("vizLocalShapes", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 813, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.vizLocalShapes", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 813, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_8vizLocalShapes(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_obj_numbers, __pyx_v_VIZ_DEST, __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_8vizLocalShapes(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_numbers, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("vizLocalShapes", 0); + + /* "common/profile_classes.pyx":824 + * :param shell_based: whether shell-based or ellipsoid-based algorithm should be run + * :type shell_based: boolean""" + * return # <<<<<<<<<<<<<< + * + * def vizGlobalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":813 + * return + * + * def vizLocalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Visualize local shape of objects with numbers ``obj_numbers`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":826 + * return + * + * def vizGlobalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False): # <<<<<<<<<<<<<< + * """ Visualize global shape of objects with numbers ``obj_numbers`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_11vizGlobalShapes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_10vizGlobalShapes[] = " Visualize global shape of objects with numbers ``obj_numbers``\n \n :param obj_numbers: list of object indices for which to visualize global shapes\n :type obj_numbers: list of ints\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_11vizGlobalShapes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_obj_numbers = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("vizGlobalShapes (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj_numbers,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_reduced,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_numbers)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("vizGlobalShapes", 0, 2, 3, 1); __PYX_ERR(0, 826, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "vizGlobalShapes") < 0)) __PYX_ERR(0, 826, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj_numbers = values[0]; + __pyx_v_VIZ_DEST = ((PyObject*)values[1]); + if (values[2]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 826, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("vizGlobalShapes", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 826, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.vizGlobalShapes", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 826, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_10vizGlobalShapes(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_obj_numbers, __pyx_v_VIZ_DEST, __pyx_v_reduced); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_10vizGlobalShapes(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_numbers, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("vizGlobalShapes", 0); + + /* "common/profile_classes.pyx":835 + * :param reduced: whether or not reduced shape tensor (1/r^2 factor) + * :type reduced: boolean""" + * return # <<<<<<<<<<<<<< + * + * def plotGlobalEpsHist(self, HIST_NB_BINS, str VIZ_DEST): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":826 + * return + * + * def vizGlobalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False): # <<<<<<<<<<<<<< + * """ Visualize global shape of objects with numbers ``obj_numbers`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":837 + * return + * + * def plotGlobalEpsHist(self, HIST_NB_BINS, str VIZ_DEST): # <<<<<<<<<<<<<< + * """ Plot global ellipticity histogram + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_13plotGlobalEpsHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_12plotGlobalEpsHist[] = " Plot global ellipticity histogram\n \n :param HIST_NB_BINS: number of histogram bins\n :type HIST_NB_BINS: int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_13plotGlobalEpsHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotGlobalEpsHist (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_HIST_NB_BINS,&__pyx_n_s_VIZ_DEST,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HIST_NB_BINS)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalEpsHist", 1, 2, 2, 1); __PYX_ERR(0, 837, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotGlobalEpsHist") < 0)) __PYX_ERR(0, 837, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_HIST_NB_BINS = values[0]; + __pyx_v_VIZ_DEST = ((PyObject*)values[1]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotGlobalEpsHist", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 837, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.plotGlobalEpsHist", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 837, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_12plotGlobalEpsHist(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_HIST_NB_BINS, __pyx_v_VIZ_DEST); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_12plotGlobalEpsHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotGlobalEpsHist", 0); + + /* "common/profile_classes.pyx":844 + * :param VIZ_DEST: visualization folder + * :type VIZ_DEST: string""" + * return # <<<<<<<<<<<<<< + * + * def plotLocalEpsHist(self, frac_r200, HIST_NB_BINS, str VIZ_DEST): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":837 + * return + * + * def plotGlobalEpsHist(self, HIST_NB_BINS, str VIZ_DEST): # <<<<<<<<<<<<<< + * """ Plot global ellipticity histogram + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":846 + * return + * + * def plotLocalEpsHist(self, frac_r200, HIST_NB_BINS, str VIZ_DEST): # <<<<<<<<<<<<<< + * """ Plot local ellipticity histogram at depth ``frac_r200`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_15plotLocalEpsHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_14plotLocalEpsHist[] = " Plot local ellipticity histogram at depth ``frac_r200``\n \n :param frac_r200: depth of objects to plot ellipticity, in units of R200\n :type frac_r200: float\n :param HIST_NB_BINS: number of histogram bins\n :type HIST_NB_BINS: int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_15plotLocalEpsHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_frac_r200 = 0; + CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotLocalEpsHist (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frac_r200,&__pyx_n_s_HIST_NB_BINS,&__pyx_n_s_VIZ_DEST,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frac_r200)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HIST_NB_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalEpsHist", 1, 3, 3, 1); __PYX_ERR(0, 846, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalEpsHist", 1, 3, 3, 2); __PYX_ERR(0, 846, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotLocalEpsHist") < 0)) __PYX_ERR(0, 846, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v_frac_r200 = values[0]; + __pyx_v_HIST_NB_BINS = values[1]; + __pyx_v_VIZ_DEST = ((PyObject*)values[2]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotLocalEpsHist", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 846, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.plotLocalEpsHist", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 846, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_14plotLocalEpsHist(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_frac_r200, __pyx_v_HIST_NB_BINS, __pyx_v_VIZ_DEST); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_14plotLocalEpsHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_frac_r200, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotLocalEpsHist", 0); + + /* "common/profile_classes.pyx":855 + * :param VIZ_DEST: visualization folder + * :type VIZ_DEST: string""" + * return # <<<<<<<<<<<<<< + * + * def plotLocalTHist(self, HIST_NB_BINS, str VIZ_DEST, frac_r200, bint reduced = False, bint shell_based = False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":846 + * return + * + * def plotLocalEpsHist(self, frac_r200, HIST_NB_BINS, str VIZ_DEST): # <<<<<<<<<<<<<< + * """ Plot local ellipticity histogram at depth ``frac_r200`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":857 + * return + * + * def plotLocalTHist(self, HIST_NB_BINS, str VIZ_DEST, frac_r200, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Plot local triaxiality histogram at depth ``frac_r200`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_17plotLocalTHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_16plotLocalTHist[] = " Plot local triaxiality histogram at depth ``frac_r200``\n \n :param HIST_NB_BINS: number of histogram bins\n :type HIST_NB_BINS: int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param frac_r200: depth of objects to plot triaxiality, in units of R200\n :type frac_r200: float\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_17plotLocalTHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED PyObject *__pyx_v_frac_r200 = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotLocalTHist (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_HIST_NB_BINS,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_frac_r200,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[5] = {0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HIST_NB_BINS)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHist", 0, 3, 5, 1); __PYX_ERR(0, 857, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frac_r200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHist", 0, 3, 5, 2); __PYX_ERR(0, 857, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotLocalTHist") < 0)) __PYX_ERR(0, 857, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_HIST_NB_BINS = values[0]; + __pyx_v_VIZ_DEST = ((PyObject*)values[1]); + __pyx_v_frac_r200 = values[2]; + if (values[3]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 857, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[4]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 857, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotLocalTHist", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 857, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.plotLocalTHist", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 857, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_16plotLocalTHist(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_HIST_NB_BINS, __pyx_v_VIZ_DEST, __pyx_v_frac_r200, __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_16plotLocalTHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED PyObject *__pyx_v_frac_r200, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotLocalTHist", 0); + + /* "common/profile_classes.pyx":870 + * :param shell_based: whether shell-based or ellipsoid-based algorithm should be run + * :type shell_based: boolean""" + * return # <<<<<<<<<<<<<< + * + * def plotGlobalTHist(self, HIST_NB_BINS, str VIZ_DEST, bint reduced = False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":857 + * return + * + * def plotLocalTHist(self, HIST_NB_BINS, str VIZ_DEST, frac_r200, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Plot local triaxiality histogram at depth ``frac_r200`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":872 + * return + * + * def plotGlobalTHist(self, HIST_NB_BINS, str VIZ_DEST, bint reduced = False): # <<<<<<<<<<<<<< + * """ Plot global triaxiality histogram + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_19plotGlobalTHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_18plotGlobalTHist[] = " Plot global triaxiality histogram\n \n :param HIST_NB_BINS: number of histogram bins\n :type HIST_NB_BINS: int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_19plotGlobalTHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotGlobalTHist (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_HIST_NB_BINS,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_reduced,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HIST_NB_BINS)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalTHist", 0, 2, 3, 1); __PYX_ERR(0, 872, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotGlobalTHist") < 0)) __PYX_ERR(0, 872, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_HIST_NB_BINS = values[0]; + __pyx_v_VIZ_DEST = ((PyObject*)values[1]); + if (values[2]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 872, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotGlobalTHist", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 872, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.plotGlobalTHist", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 872, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_18plotGlobalTHist(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_HIST_NB_BINS, __pyx_v_VIZ_DEST, __pyx_v_reduced); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_18plotGlobalTHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotGlobalTHist", 0); + + /* "common/profile_classes.pyx":881 + * :param reduced: whether or not reduced shape tensor (1/r^2 factor) + * :type reduced: boolean""" + * return # <<<<<<<<<<<<<< + * + * def plotShapeProfs(self, str VIZ_DEST, bint reduced = False, bint shell_based = False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":872 + * return + * + * def plotGlobalTHist(self, HIST_NB_BINS, str VIZ_DEST, bint reduced = False): # <<<<<<<<<<<<<< + * """ Plot global triaxiality histogram + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":883 + * return + * + * def plotShapeProfs(self, str VIZ_DEST, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Draws shape profiles, also mass bin-decomposed ones + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_21plotShapeProfs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_20plotShapeProfs[] = " Draws shape profiles, also mass bin-decomposed ones\n \n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_21plotShapeProfs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotShapeProfs (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_VIZ_DEST,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotShapeProfs") < 0)) __PYX_ERR(0, 883, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_VIZ_DEST = ((PyObject*)values[0]); + if (values[1]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 883, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[2]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 883, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotShapeProfs", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 883, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.plotShapeProfs", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 883, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_20plotShapeProfs(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_VIZ_DEST, __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_20plotShapeProfs(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotShapeProfs", 0); + + /* "common/profile_classes.pyx":892 + * :param shell_based: whether shell-based or ellipsoid-based algorithm should be run + * :type shell_based: boolean""" + * return # <<<<<<<<<<<<<< + * + * def dumpShapeCatLocal(self, str CAT_DEST, bint reduced = False, bint shell_based = False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":883 + * return + * + * def plotShapeProfs(self, str VIZ_DEST, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Draws shape profiles, also mass bin-decomposed ones + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":894 + * return + * + * def dumpShapeCatLocal(self, str CAT_DEST, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Dumps all relevant local shape data into ``CAT_DEST`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_23dumpShapeCatLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_22dumpShapeCatLocal[] = " Dumps all relevant local shape data into ``CAT_DEST``\n \n :param CAT_DEST: catalogue folder\n :type CAT_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_23dumpShapeCatLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatLocal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_CAT_DEST,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CAT_DEST)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dumpShapeCatLocal") < 0)) __PYX_ERR(0, 894, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_CAT_DEST = ((PyObject*)values[0]); + if (values[1]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 894, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[2]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 894, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocal", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 894, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.dumpShapeCatLocal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CAT_DEST), (&PyUnicode_Type), 1, "CAT_DEST", 1))) __PYX_ERR(0, 894, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_22dumpShapeCatLocal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_CAT_DEST, __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_22dumpShapeCatLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatLocal", 0); + + /* "common/profile_classes.pyx":903 + * :param shell_based: whether shell-based or ellipsoid-based algorithm should be run + * :type shell_based: boolean""" + * return # <<<<<<<<<<<<<< + * + * def dumpShapeCatGlobal(self, str CAT_DEST, bint reduced = False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":894 + * return + * + * def dumpShapeCatLocal(self, str CAT_DEST, bint reduced = False, bint shell_based = False): # <<<<<<<<<<<<<< + * """ Dumps all relevant local shape data into ``CAT_DEST`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":905 + * return + * + * def dumpShapeCatGlobal(self, str CAT_DEST, bint reduced = False): # <<<<<<<<<<<<<< + * """ Dumps all relevant global shape data into ``CAT_DEST`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_25dumpShapeCatGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_24dumpShapeCatGlobal[] = " Dumps all relevant global shape data into ``CAT_DEST``\n \n :param CAT_DEST: catalogue folder\n :type CAT_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_25dumpShapeCatGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatGlobal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_CAT_DEST,&__pyx_n_s_reduced,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CAT_DEST)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dumpShapeCatGlobal") < 0)) __PYX_ERR(0, 905, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_CAT_DEST = ((PyObject*)values[0]); + if (values[1]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 905, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobal", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 905, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.dumpShapeCatGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CAT_DEST), (&PyUnicode_Type), 1, "CAT_DEST", 1))) __PYX_ERR(0, 905, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_24dumpShapeCatGlobal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), __pyx_v_CAT_DEST, __pyx_v_reduced); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_24dumpShapeCatGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatGlobal", 0); + + /* "common/profile_classes.pyx":912 + * :param reduced: whether or not reduced shape tensor (1/r^2 factor) + * :type reduced: boolean""" + * return # <<<<<<<<<<<<<< + * + * def getObjInfo(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":905 + * return + * + * def dumpShapeCatGlobal(self, str CAT_DEST, bint reduced = False): # <<<<<<<<<<<<<< + * """ Dumps all relevant global shape data into ``CAT_DEST`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":914 + * return + * + * def getObjInfo(self): # <<<<<<<<<<<<<< + * """ Print basic info about the objects""" + * return + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_27getObjInfo(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_6common_15profile_classes_14DensShapeProfs_26getObjInfo[] = " Print basic info about the objects"; +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_27getObjInfo(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getObjInfo (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_26getObjInfo(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_26getObjInfo(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getObjInfo", 0); + + /* "common/profile_classes.pyx":916 + * def getObjInfo(self): + * """ Print basic info about the objects""" + * return # <<<<<<<<<<<<<< + * + * cdef class DensProfsHDF5(CosmicBase): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":914 + * return + * + * def getObjInfo(self): # <<<<<<<<<<<<<< + * """ Print basic info about the objects""" + * return + */ + + /* function exit code */ + __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_6common_15profile_classes_14DensShapeProfs_29__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_29__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_28__reduce_cython__(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_28__reduce_cython__(struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__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; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + 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; + PyObject *__pyx_t_15 = NULL; + int __pyx_t_16; + int __pyx_t_17; + int __pyx_t_18; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.CENTER, self.D_BINS, self.D_LOGEND, self.D_LOGSTART, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.M_TOL, self.N_MIN, self.N_WALL, self.SAFE, self.SNAP, self.idx_cat, self.masses, self.r200, self.start_time, self.xyz) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->D_BINS); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->D_LOGEND); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->D_LOGSTART); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.__pyx_base.L_BOX); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.__pyx_base.MASS_UNIT); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx_base.__pyx_base.MIN_NUMBER_PTCS); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyFloat_FromDouble(__pyx_v_self->M_TOL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_self->N_MIN); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_self->N_WALL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.__pyx_base.SAFE); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (unlikely(!__pyx_v_self->__pyx_base.masses.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 5, __pyx_L1_error)} + __pyx_t_11 = __pyx_memoryview_fromslice(__pyx_v_self->__pyx_base.masses, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + if (unlikely(!__pyx_v_self->__pyx_base.__pyx_base.r200.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 5, __pyx_L1_error)} + __pyx_t_12 = __pyx_memoryview_fromslice(__pyx_v_self->__pyx_base.__pyx_base.r200, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.__pyx_base.start_time); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + if (unlikely(!__pyx_v_self->__pyx_base.xyz.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 5, __pyx_L1_error)} + __pyx_t_14 = __pyx_memoryview_fromslice(__pyx_v_self->__pyx_base.xyz, 2, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = PyTuple_New(17); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_INCREF(__pyx_v_self->__pyx_base.__pyx_base.CENTER); + __Pyx_GIVEREF(__pyx_v_self->__pyx_base.__pyx_base.CENTER); + PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_v_self->__pyx_base.__pyx_base.CENTER); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_15, 3, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_15, 4, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_15, 5, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_15, 6, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_15, 7, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_15, 8, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_15, 9, __pyx_t_9); + __Pyx_GIVEREF(__pyx_t_10); + PyTuple_SET_ITEM(__pyx_t_15, 10, __pyx_t_10); + __Pyx_INCREF(__pyx_v_self->__pyx_base.__pyx_base.SNAP); + __Pyx_GIVEREF(__pyx_v_self->__pyx_base.__pyx_base.SNAP); + PyTuple_SET_ITEM(__pyx_t_15, 11, __pyx_v_self->__pyx_base.__pyx_base.SNAP); + __Pyx_INCREF(__pyx_v_self->__pyx_base.idx_cat); + __Pyx_GIVEREF(__pyx_v_self->__pyx_base.idx_cat); + PyTuple_SET_ITEM(__pyx_t_15, 12, __pyx_v_self->__pyx_base.idx_cat); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_15, 13, __pyx_t_11); + __Pyx_GIVEREF(__pyx_t_12); + PyTuple_SET_ITEM(__pyx_t_15, 14, __pyx_t_12); + __Pyx_GIVEREF(__pyx_t_13); + PyTuple_SET_ITEM(__pyx_t_15, 15, __pyx_t_13); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_15, 16, __pyx_t_14); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __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_t_14 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_15); + __pyx_t_15 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.CENTER, self.D_BINS, self.D_LOGEND, self.D_LOGSTART, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.M_TOL, self.N_MIN, self.N_WALL, self.SAFE, self.SNAP, self.idx_cat, self.masses, self.r200, self.start_time, self.xyz) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_15 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_v__dict = __pyx_t_15; + __pyx_t_15 = 0; + + /* "(tree fragment)":7 + * state = (self.CENTER, self.D_BINS, self.D_LOGEND, self.D_LOGSTART, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.M_TOL, self.N_MIN, self.N_WALL, self.SAFE, self.SNAP, self.idx_cat, self.masses, self.r200, self.start_time, self.xyz) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_16 = (__pyx_v__dict != Py_None); + __pyx_t_17 = (__pyx_t_16 != 0); + if (__pyx_t_17) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_v__dict); + __pyx_t_14 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_14)); + __pyx_t_14 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.CENTER is not None or self.SNAP is not None or self.idx_cat is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.CENTER, self.D_BINS, self.D_LOGEND, self.D_LOGSTART, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.M_TOL, self.N_MIN, self.N_WALL, self.SAFE, self.SNAP, self.idx_cat, self.masses, self.r200, self.start_time, self.xyz) + * _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.CENTER is not None or self.SNAP is not None or self.idx_cat is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_DensShapeProfs, (type(self), 0x80bcedb, None), state + */ + /*else*/ { + __pyx_t_16 = (__pyx_v_self->__pyx_base.__pyx_base.CENTER != ((PyObject*)Py_None)); + __pyx_t_18 = (__pyx_t_16 != 0); + if (!__pyx_t_18) { + } else { + __pyx_t_17 = __pyx_t_18; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_18 = (__pyx_v_self->__pyx_base.__pyx_base.SNAP != ((PyObject*)Py_None)); + __pyx_t_16 = (__pyx_t_18 != 0); + if (!__pyx_t_16) { + } else { + __pyx_t_17 = __pyx_t_16; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_16 = (__pyx_v_self->__pyx_base.idx_cat != Py_None); + __pyx_t_18 = (__pyx_t_16 != 0); + __pyx_t_17 = __pyx_t_18; + __pyx_L4_bool_binop_done:; + __pyx_v_use_setstate = __pyx_t_17; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.CENTER is not None or self.SNAP is not None or self.idx_cat is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_DensShapeProfs, (type(self), 0x80bcedb, None), state + * else: + */ + __pyx_t_17 = (__pyx_v_use_setstate != 0); + if (__pyx_t_17) { + + /* "(tree fragment)":13 + * use_setstate = self.CENTER is not None or self.SNAP is not None or self.idx_cat is not None + * if use_setstate: + * return __pyx_unpickle_DensShapeProfs, (type(self), 0x80bcedb, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_DensShapeProfs, (type(self), 0x80bcedb, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_pyx_unpickle_DensShapeProfs); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_15, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_134991579); + __Pyx_GIVEREF(__pyx_int_134991579); + PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_int_134991579); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_15, 2, Py_None); + __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_14); + __Pyx_GIVEREF(__pyx_t_15); + PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_15); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_v_state); + __pyx_t_14 = 0; + __pyx_t_15 = 0; + __pyx_r = __pyx_t_13; + __pyx_t_13 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.CENTER is not None or self.SNAP is not None or self.idx_cat is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_DensShapeProfs, (type(self), 0x80bcedb, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_DensShapeProfs, (type(self), 0x80bcedb, None), state + * else: + * return __pyx_unpickle_DensShapeProfs, (type(self), 0x80bcedb, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_DensShapeProfs__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_pyx_unpickle_DensShapeProfs); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_15 = PyTuple_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_15, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_134991579); + __Pyx_GIVEREF(__pyx_int_134991579); + PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_int_134991579); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_v_state); + __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_13); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_13); + __Pyx_GIVEREF(__pyx_t_15); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_15); + __pyx_t_13 = 0; + __pyx_t_15 = 0; + __pyx_r = __pyx_t_14; + __pyx_t_14 = 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_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_AddTraceback("common.profile_classes.DensShapeProfs.__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_DensShapeProfs, (type(self), 0x80bcedb, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_DensShapeProfs__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_31__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_6common_15profile_classes_14DensShapeProfs_31__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_14DensShapeProfs_30__setstate_cython__(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_14DensShapeProfs_30__setstate_cython__(struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__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__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_DensShapeProfs, (type(self), 0x80bcedb, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_DensShapeProfs__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_6common_15profile_classes___pyx_unpickle_DensShapeProfs__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_DensShapeProfs, (type(self), 0x80bcedb, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_DensShapeProfs__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("common.profile_classes.DensShapeProfs.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":933 + * cdef bint WANT_RVIR + * + * def __init__(self, str HDF5_SNAP_DEST, str HDF5_GROUP_DEST, str SNAP, int SNAP_MAX, float L_BOX, int MIN_NUMBER_PTCS, int MIN_NUMBER_STAR_PTCS, str CENTER, bint WANT_RVIR): # <<<<<<<<<<<<<< + * """ + * :param HDF5_SNAP_DEST: where we can find the snapshot + */ + +/* Python wrapper */ +static int __pyx_pw_6common_15profile_classes_13DensProfsHDF5_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_13DensProfsHDF5___init__[] = "\n :param HDF5_SNAP_DEST: where we can find the snapshot\n :type HDF5_SNAP_DEST: string\n :param HDF5_GROUP_DEST: where we can find the group files\n :type HDF5_GROUP_DEST: string\n :param SNAP: e.g. '024'\n :type SNAP: string\n :param SNAP_MAX: e.g. 16\n :type SNAP_MAX: int\n :param SNAP: snapshot identifier, e.g. '024'\n :type SNAP: string\n :param L_BOX: simulation box side length\n :type L_BOX: float, units: Mpc/h\n :param MIN_NUMBER_PTCS: minimum number of DM particles for halo to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param MIN_NUMBER_STAR_PTCS: minimum number of star particles for galaxy to qualify for morphology calculation\n :type MIN_NUMBER_STAR_PTCS: int\n :param CENTER: shape quantities will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str\n :param WANT_RVIR: Whether or not we want quantities (e.g. D_LOGSTART) expressed \n with respect to the virial radius R_vir or the overdensity radius R_200\n :type WANT_RVIR: boolean"; +#if CYTHON_COMPILING_IN_CPYTHON +struct wrapperbase __pyx_wrapperbase_6common_15profile_classes_13DensProfsHDF5___init__; +#endif +static int __pyx_pw_6common_15profile_classes_13DensProfsHDF5_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_HDF5_SNAP_DEST = 0; + PyObject *__pyx_v_HDF5_GROUP_DEST = 0; + PyObject *__pyx_v_SNAP = 0; + int __pyx_v_SNAP_MAX; + float __pyx_v_L_BOX; + int __pyx_v_MIN_NUMBER_PTCS; + int __pyx_v_MIN_NUMBER_STAR_PTCS; + PyObject *__pyx_v_CENTER = 0; + int __pyx_v_WANT_RVIR; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_HDF5_SNAP_DEST,&__pyx_n_s_HDF5_GROUP_DEST,&__pyx_n_s_SNAP,&__pyx_n_s_SNAP_MAX,&__pyx_n_s_L_BOX,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_MIN_NUMBER_STAR_PTCS,&__pyx_n_s_CENTER,&__pyx_n_s_WANT_RVIR,0}; + PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HDF5_SNAP_DEST)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HDF5_GROUP_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 1); __PYX_ERR(0, 933, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_SNAP)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 2); __PYX_ERR(0, 933, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_SNAP_MAX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 3); __PYX_ERR(0, 933, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 4); __PYX_ERR(0, 933, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 5); __PYX_ERR(0, 933, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_STAR_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 6); __PYX_ERR(0, 933, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 7); __PYX_ERR(0, 933, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_WANT_RVIR)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 8); __PYX_ERR(0, 933, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 933, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 9) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + } + __pyx_v_HDF5_SNAP_DEST = ((PyObject*)values[0]); + __pyx_v_HDF5_GROUP_DEST = ((PyObject*)values[1]); + __pyx_v_SNAP = ((PyObject*)values[2]); + __pyx_v_SNAP_MAX = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_SNAP_MAX == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 933, __pyx_L3_error) + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 933, __pyx_L3_error) + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 933, __pyx_L3_error) + __pyx_v_MIN_NUMBER_STAR_PTCS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_MIN_NUMBER_STAR_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 933, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[7]); + __pyx_v_WANT_RVIR = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_WANT_RVIR == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 933, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 933, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_HDF5_SNAP_DEST), (&PyUnicode_Type), 1, "HDF5_SNAP_DEST", 1))) __PYX_ERR(0, 933, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_HDF5_GROUP_DEST), (&PyUnicode_Type), 1, "HDF5_GROUP_DEST", 1))) __PYX_ERR(0, 933, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_SNAP), (&PyUnicode_Type), 1, "SNAP", 1))) __PYX_ERR(0, 933, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 933, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5___init__(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self), __pyx_v_HDF5_SNAP_DEST, __pyx_v_HDF5_GROUP_DEST, __pyx_v_SNAP, __pyx_v_SNAP_MAX, __pyx_v_L_BOX, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_MIN_NUMBER_STAR_PTCS, __pyx_v_CENTER, __pyx_v_WANT_RVIR); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_6common_15profile_classes_13DensProfsHDF5___init__(struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, PyObject *__pyx_v_HDF5_SNAP_DEST, PyObject *__pyx_v_HDF5_GROUP_DEST, PyObject *__pyx_v_SNAP, int __pyx_v_SNAP_MAX, float __pyx_v_L_BOX, int __pyx_v_MIN_NUMBER_PTCS, int __pyx_v_MIN_NUMBER_STAR_PTCS, PyObject *__pyx_v_CENTER, int __pyx_v_WANT_RVIR) { + int __pyx_r; + __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; + PyObject *__pyx_t_7 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "common/profile_classes.pyx":957 + * with respect to the virial radius R_vir or the overdensity radius R_200 + * :type WANT_RVIR: boolean""" + * super().__init__(SNAP, L_BOX, MIN_NUMBER_PTCS, CENTER) # <<<<<<<<<<<<<< + * self.HDF5_SNAP_DEST = HDF5_SNAP_DEST + * self.HDF5_GROUP_DEST = HDF5_GROUP_DEST + */ + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)__pyx_ptype_6common_15profile_classes_DensProfsHDF5)); + __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6common_15profile_classes_DensProfsHDF5)); + PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6common_15profile_classes_DensProfsHDF5)); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self)); + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyFloat_FromDouble(__pyx_v_L_BOX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_MIN_NUMBER_PTCS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_6 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_v_SNAP, __pyx_t_3, __pyx_t_4, __pyx_v_CENTER}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[5] = {__pyx_t_5, __pyx_v_SNAP, __pyx_t_3, __pyx_t_4, __pyx_v_CENTER}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else + #endif + { + __pyx_t_7 = PyTuple_New(4+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (__pyx_t_5) { + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL; + } + __Pyx_INCREF(__pyx_v_SNAP); + __Pyx_GIVEREF(__pyx_v_SNAP); + PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_SNAP); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_t_4); + __Pyx_INCREF(__pyx_v_CENTER); + __Pyx_GIVEREF(__pyx_v_CENTER); + PyTuple_SET_ITEM(__pyx_t_7, 3+__pyx_t_6, __pyx_v_CENTER); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "common/profile_classes.pyx":958 + * :type WANT_RVIR: boolean""" + * super().__init__(SNAP, L_BOX, MIN_NUMBER_PTCS, CENTER) + * self.HDF5_SNAP_DEST = HDF5_SNAP_DEST # <<<<<<<<<<<<<< + * self.HDF5_GROUP_DEST = HDF5_GROUP_DEST + * self.MIN_NUMBER_STAR_PTCS = MIN_NUMBER_STAR_PTCS + */ + __Pyx_INCREF(__pyx_v_HDF5_SNAP_DEST); + __Pyx_GIVEREF(__pyx_v_HDF5_SNAP_DEST); + __Pyx_GOTREF(__pyx_v_self->HDF5_SNAP_DEST); + __Pyx_DECREF(__pyx_v_self->HDF5_SNAP_DEST); + __pyx_v_self->HDF5_SNAP_DEST = __pyx_v_HDF5_SNAP_DEST; + + /* "common/profile_classes.pyx":959 + * super().__init__(SNAP, L_BOX, MIN_NUMBER_PTCS, CENTER) + * self.HDF5_SNAP_DEST = HDF5_SNAP_DEST + * self.HDF5_GROUP_DEST = HDF5_GROUP_DEST # <<<<<<<<<<<<<< + * self.MIN_NUMBER_STAR_PTCS = MIN_NUMBER_STAR_PTCS + * self.SNAP_MAX = SNAP_MAX + */ + __Pyx_INCREF(__pyx_v_HDF5_GROUP_DEST); + __Pyx_GIVEREF(__pyx_v_HDF5_GROUP_DEST); + __Pyx_GOTREF(__pyx_v_self->HDF5_GROUP_DEST); + __Pyx_DECREF(__pyx_v_self->HDF5_GROUP_DEST); + __pyx_v_self->HDF5_GROUP_DEST = __pyx_v_HDF5_GROUP_DEST; + + /* "common/profile_classes.pyx":960 + * self.HDF5_SNAP_DEST = HDF5_SNAP_DEST + * self.HDF5_GROUP_DEST = HDF5_GROUP_DEST + * self.MIN_NUMBER_STAR_PTCS = MIN_NUMBER_STAR_PTCS # <<<<<<<<<<<<<< + * self.SNAP_MAX = SNAP_MAX + * self.WANT_RVIR = WANT_RVIR + */ + __pyx_v_self->MIN_NUMBER_STAR_PTCS = __pyx_v_MIN_NUMBER_STAR_PTCS; + + /* "common/profile_classes.pyx":961 + * self.HDF5_GROUP_DEST = HDF5_GROUP_DEST + * self.MIN_NUMBER_STAR_PTCS = MIN_NUMBER_STAR_PTCS + * self.SNAP_MAX = SNAP_MAX # <<<<<<<<<<<<<< + * self.WANT_RVIR = WANT_RVIR + * + */ + __pyx_v_self->SNAP_MAX = __pyx_v_SNAP_MAX; + + /* "common/profile_classes.pyx":962 + * self.MIN_NUMBER_STAR_PTCS = MIN_NUMBER_STAR_PTCS + * self.SNAP_MAX = SNAP_MAX + * self.WANT_RVIR = WANT_RVIR # <<<<<<<<<<<<<< + * + * def getXYZMasses(self, str obj_type = 'dm'): + */ + __pyx_v_self->WANT_RVIR = __pyx_v_WANT_RVIR; + + /* "common/profile_classes.pyx":933 + * cdef bint WANT_RVIR + * + * def __init__(self, str HDF5_SNAP_DEST, str HDF5_GROUP_DEST, str SNAP, int SNAP_MAX, float L_BOX, int MIN_NUMBER_PTCS, int MIN_NUMBER_STAR_PTCS, str CENTER, bint WANT_RVIR): # <<<<<<<<<<<<<< + * """ + * :param HDF5_SNAP_DEST: where we can find the snapshot + */ + + /* function exit code */ + __pyx_r = 0; + 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_7); + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":964 + * self.WANT_RVIR = WANT_RVIR + * + * def getXYZMasses(self, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Retrieve positions and masses of DM/gx + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_3getXYZMasses(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_13DensProfsHDF5_2getXYZMasses[] = " Retrieve positions and masses of DM/gx\n \n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return xyz, masses, MIN_NUMBER_PTCS: positions, masses, and minimum number of particles\n :rtype: (N2,3) floats, (N2,) floats, int"; +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_3getXYZMasses(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getXYZMasses (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj_type,0}; + PyObject* values[1] = {0}; + values[0] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[0] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getXYZMasses") < 0)) __PYX_ERR(0, 964, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj_type = ((PyObject*)values[0]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getXYZMasses", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 964, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.getXYZMasses", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 964, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5_2getXYZMasses(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self), __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_2getXYZMasses(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getXYZMasses", 0); + + /* "common/profile_classes.pyx":971 + * :return xyz, masses, MIN_NUMBER_PTCS: positions, masses, and minimum number of particles + * :rtype: (N2,3) floats, (N2,) floats, int""" + * return # <<<<<<<<<<<<<< + * + * def getVelXYZ(self, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":964 + * self.WANT_RVIR = WANT_RVIR + * + * def getXYZMasses(self, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Retrieve positions and masses of DM/gx + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":973 + * return + * + * def getVelXYZ(self, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Retrieve velocities of DM/gx + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_5getVelXYZ(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_13DensProfsHDF5_4getVelXYZ[] = " Retrieve velocities of DM/gx\n \n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return velxyz: velocity array\n :rtype: (N2,3) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_5getVelXYZ(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getVelXYZ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj_type,0}; + PyObject* values[1] = {0}; + values[0] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[0] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getVelXYZ") < 0)) __PYX_ERR(0, 973, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj_type = ((PyObject*)values[0]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getVelXYZ", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 973, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.getVelXYZ", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 973, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5_4getVelXYZ(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self), __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_4getVelXYZ(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getVelXYZ", 0); + + /* "common/profile_classes.pyx":980 + * :return velxyz: velocity array + * :rtype: (N2,3) floats""" + * return # <<<<<<<<<<<<<< + * + * def getIdxCat(self, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":973 + * return + * + * def getVelXYZ(self, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Retrieve velocities of DM/gx + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":982 + * return + * + * def getIdxCat(self, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Fetch catalogue + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_7getIdxCat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_13DensProfsHDF5_6getIdxCat[] = " Fetch catalogue\n \n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return cat: list of indices defining the objects\n :rtype: list of length N1, each consisting of a list of int indices"; +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_7getIdxCat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getIdxCat (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj_type,0}; + PyObject* values[1] = {0}; + values[0] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[0] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getIdxCat") < 0)) __PYX_ERR(0, 982, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj_type = ((PyObject*)values[0]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getIdxCat", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 982, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.getIdxCat", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 982, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5_6getIdxCat(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self), __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_6getIdxCat(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getIdxCat", 0); + + /* "common/profile_classes.pyx":990 + * :rtype: list of length N1, each consisting of a list of int indices""" + * + * return # <<<<<<<<<<<<<< + * + * def getMassesCenters(self, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":982 + * return + * + * def getIdxCat(self, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Fetch catalogue + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":992 + * return + * + * def getMassesCenters(self, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Calculate total mass and centers of objects + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_9getMassesCenters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_13DensProfsHDF5_8getMassesCenters[] = " Calculate total mass and centers of objects\n \n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return centers, m: centers and masses\n :rtype: (N,3) and (N,) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_9getMassesCenters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getMassesCenters (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj_type,0}; + PyObject* values[1] = {0}; + values[0] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[0] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMassesCenters") < 0)) __PYX_ERR(0, 992, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj_type = ((PyObject*)values[0]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getMassesCenters", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 992, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.getMassesCenters", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 992, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5_8getMassesCenters(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self), __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_8getMassesCenters(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getMassesCenters", 0); + + /* "common/profile_classes.pyx":999 + * :return centers, m: centers and masses + * :rtype: (N,3) and (N,) floats""" + * return # <<<<<<<<<<<<<< + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":992 + * return + * + * def getMassesCenters(self, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Calculate total mass and centers of objects + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1001 + * return + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get direct-binning-based density profiles + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_11getDensProfsDirectBinning(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_13DensProfsHDF5_10getDensProfsDirectBinning[] = " Get direct-binning-based density profiles\n \n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param spherical: whether or not spherical shell-based or ellipsoidal shell-based\n :type spherical: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return: density profiles\n :rtype: (N2, r_res) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_11getDensProfsDirectBinning(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_ROverR200 = 0; + CYTHON_UNUSED int __pyx_v_spherical; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsDirectBinning (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ROverR200,&__pyx_n_s_spherical,&__pyx_n_s_obj_type,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spherical); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDensProfsDirectBinning") < 0)) __PYX_ERR(0, 1001, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_ROverR200 = values[0]; + if (values[1]) { + __pyx_v_spherical = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_spherical == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1001, __pyx_L3_error) + } else { + __pyx_v_spherical = ((int)1); + } + __pyx_v_obj_type = ((PyObject*)values[2]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getDensProfsDirectBinning", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1001, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.getDensProfsDirectBinning", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1001, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5_10getDensProfsDirectBinning(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self), __pyx_v_ROverR200, __pyx_v_spherical, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_10getDensProfsDirectBinning(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED int __pyx_v_spherical, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsDirectBinning", 0); + + /* "common/profile_classes.pyx":1012 + * :return: density profiles + * :rtype: (N2, r_res) floats""" + * return # <<<<<<<<<<<<<< + * + * def getDensProfsKernelBased(self, ROverR200, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1001 + * return + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get direct-binning-based density profiles + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1014 + * return + * + * def getDensProfsKernelBased(self, ROverR200, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get kernel-based density profiles + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_13getDensProfsKernelBased(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_13DensProfsHDF5_12getDensProfsKernelBased[] = " Get kernel-based density profiles\n \n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return: density profiles\n :rtype: (N2, r_res) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_13getDensProfsKernelBased(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_ROverR200 = 0; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsKernelBased (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ROverR200,&__pyx_n_s_obj_type,0}; + PyObject* values[2] = {0,0}; + values[1] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDensProfsKernelBased") < 0)) __PYX_ERR(0, 1014, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_ROverR200 = values[0]; + __pyx_v_obj_type = ((PyObject*)values[1]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getDensProfsKernelBased", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1014, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.getDensProfsKernelBased", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1014, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5_12getDensProfsKernelBased(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self), __pyx_v_ROverR200, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_12getDensProfsKernelBased(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsKernelBased", 0); + + /* "common/profile_classes.pyx":1023 + * :return: density profiles + * :rtype: (N2, r_res) floats""" + * return # <<<<<<<<<<<<<< + * + * def getDensProfsBestFits(self, dens_profs, ROverR200, str method, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1014 + * return + * + * def getDensProfsKernelBased(self, ROverR200, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get kernel-based density profiles + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1025 + * return + * + * def getDensProfsBestFits(self, dens_profs, ROverR200, str method, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get best-fit results for density profile fitting + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_15getDensProfsBestFits(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_13DensProfsHDF5_14getDensProfsBestFits[] = " Get best-fit results for density profile fitting\n \n :param dens_profs: density profiles to be fit, in units of M_sun*h^2/(Mpc)**3\n :type dens_profs: (N3, r_res) floats\n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param method: string describing density profile model assumed for fitting\n :type method: string, either `einasto`, `alpha_beta_gamma`, `hernquist`, `nfw`\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return: best-fits for each object\n :rtype: (N3, n) floats, where n is the number of free parameters in the model ``method``"; +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_15getDensProfsBestFits(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_dens_profs = 0; + CYTHON_UNUSED PyObject *__pyx_v_ROverR200 = 0; + CYTHON_UNUSED PyObject *__pyx_v_method = 0; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsBestFits (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dens_profs,&__pyx_n_s_ROverR200,&__pyx_n_s_method,&__pyx_n_s_obj_type,0}; + PyObject* values[4] = {0,0,0,0}; + values[3] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_profs)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsBestFits", 0, 3, 4, 1); __PYX_ERR(0, 1025, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getDensProfsBestFits", 0, 3, 4, 2); __PYX_ERR(0, 1025, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[3] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDensProfsBestFits") < 0)) __PYX_ERR(0, 1025, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_dens_profs = values[0]; + __pyx_v_ROverR200 = values[1]; + __pyx_v_method = ((PyObject*)values[2]); + __pyx_v_obj_type = ((PyObject*)values[3]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getDensProfsBestFits", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1025, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.getDensProfsBestFits", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyUnicode_Type), 1, "method", 1))) __PYX_ERR(0, 1025, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1025, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5_14getDensProfsBestFits(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self), __pyx_v_dens_profs, __pyx_v_ROverR200, __pyx_v_method, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_14getDensProfsBestFits(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_method, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsBestFits", 0); + + /* "common/profile_classes.pyx":1038 + * :return: best-fits for each object + * :rtype: (N3, n) floats, where n is the number of free parameters in the model ``method``""" + * return # <<<<<<<<<<<<<< + * + * def getConcentrations(self, dens_profs, ROverR200, method, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1025 + * return + * + * def getDensProfsBestFits(self, dens_profs, ROverR200, str method, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get best-fit results for density profile fitting + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1040 + * return + * + * def getConcentrations(self, dens_profs, ROverR200, method, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get best-fit concentration values of objects from density profile fitting + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_17getConcentrations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_13DensProfsHDF5_16getConcentrations[] = " Get best-fit concentration values of objects from density profile fitting\n \n :param dens_profs: density profiles to be fit, in units of M_sun*h^2/(Mpc)**3\n :type dens_profs: (N3, r_res) floats\n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param method: string describing density profile model assumed for fitting\n :type method: string, either `einasto`, `alpha_beta_gamma`, `hernquist`, `nfw`\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return: best-fit concentration for each object\n :rtype: (N3,) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_17getConcentrations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_dens_profs = 0; + CYTHON_UNUSED PyObject *__pyx_v_ROverR200 = 0; + CYTHON_UNUSED PyObject *__pyx_v_method = 0; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getConcentrations (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dens_profs,&__pyx_n_s_ROverR200,&__pyx_n_s_method,&__pyx_n_s_obj_type,0}; + PyObject* values[4] = {0,0,0,0}; + values[3] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_profs)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getConcentrations", 0, 3, 4, 1); __PYX_ERR(0, 1040, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("getConcentrations", 0, 3, 4, 2); __PYX_ERR(0, 1040, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[3] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getConcentrations") < 0)) __PYX_ERR(0, 1040, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_dens_profs = values[0]; + __pyx_v_ROverR200 = values[1]; + __pyx_v_method = values[2]; + __pyx_v_obj_type = ((PyObject*)values[3]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getConcentrations", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1040, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.getConcentrations", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1040, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5_16getConcentrations(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self), __pyx_v_dens_profs, __pyx_v_ROverR200, __pyx_v_method, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_16getConcentrations(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_method, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getConcentrations", 0); + + /* "common/profile_classes.pyx":1053 + * :return: best-fit concentration for each object + * :rtype: (N3,) floats""" + * return # <<<<<<<<<<<<<< + * + * def plotDensProfs(self, dens_profs, ROverR200, dens_profs_fit, ROverR200_fit, str method, str VIZ_DEST, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1040 + * return + * + * def getConcentrations(self, dens_profs, ROverR200, method, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get best-fit concentration values of objects from density profile fitting + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1055 + * return + * + * def plotDensProfs(self, dens_profs, ROverR200, dens_profs_fit, ROverR200_fit, str method, str VIZ_DEST, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Draws some simplistic density profiles + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_19plotDensProfs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_13DensProfsHDF5_18plotDensProfs[] = " Draws some simplistic density profiles\n \n :param dens_profs: estimated density profiles, in units of M_sun*h^2/(Mpc)**3\n :type dens_profs: (N2, r_res) floats\n :param ROverR200: radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param dens_profs_fit: density profiles to be fit, in units of M_sun*h^2/(Mpc)**3\n :type dens_profs_fit: (N2, r_res2) floats\n :param ROverR200_fit: radii at which best-fits shall be calculated\n :type ROverR200_fit: (r_res2,) floats\n :param method: string describing density profile model assumed for fitting\n :type method: string, either `einasto`, `alpha_beta_gamma`, `hernquist`, `nfw`\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n "; +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_19plotDensProfs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_dens_profs = 0; + CYTHON_UNUSED PyObject *__pyx_v_ROverR200 = 0; + CYTHON_UNUSED PyObject *__pyx_v_dens_profs_fit = 0; + CYTHON_UNUSED PyObject *__pyx_v_ROverR200_fit = 0; + CYTHON_UNUSED PyObject *__pyx_v_method = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotDensProfs (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dens_profs,&__pyx_n_s_ROverR200,&__pyx_n_s_dens_profs_fit,&__pyx_n_s_ROverR200_fit,&__pyx_n_s_method,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_obj_type,0}; + PyObject* values[7] = {0,0,0,0,0,0,0}; + values[6] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_profs)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 0, 6, 7, 1); __PYX_ERR(0, 1055, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_profs_fit)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 0, 6, 7, 2); __PYX_ERR(0, 1055, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200_fit)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 0, 6, 7, 3); __PYX_ERR(0, 1055, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 0, 6, 7, 4); __PYX_ERR(0, 1055, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 0, 6, 7, 5); __PYX_ERR(0, 1055, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[6] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotDensProfs") < 0)) __PYX_ERR(0, 1055, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_dens_profs = values[0]; + __pyx_v_ROverR200 = values[1]; + __pyx_v_dens_profs_fit = values[2]; + __pyx_v_ROverR200_fit = values[3]; + __pyx_v_method = ((PyObject*)values[4]); + __pyx_v_VIZ_DEST = ((PyObject*)values[5]); + __pyx_v_obj_type = ((PyObject*)values[6]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotDensProfs", 0, 6, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1055, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.plotDensProfs", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyUnicode_Type), 1, "method", 1))) __PYX_ERR(0, 1055, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 1055, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1055, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5_18plotDensProfs(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self), __pyx_v_dens_profs, __pyx_v_ROverR200, __pyx_v_dens_profs_fit, __pyx_v_ROverR200_fit, __pyx_v_method, __pyx_v_VIZ_DEST, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_18plotDensProfs(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dens_profs, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_dens_profs_fit, CYTHON_UNUSED PyObject *__pyx_v_ROverR200_fit, CYTHON_UNUSED PyObject *__pyx_v_method, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotDensProfs", 0); + + /* "common/profile_classes.pyx":1073 + * :type obj_type: string + * """ + * return # <<<<<<<<<<<<<< + * + * cdef class DensShapeProfsHDF5(DensProfsHDF5): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1055 + * return + * + * def plotDensProfs(self, dens_profs, ROverR200, dens_profs_fit, ROverR200_fit, str method, str VIZ_DEST, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Draws some simplistic density profiles + * + */ + + /* function exit code */ + __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_6common_15profile_classes_13DensProfsHDF5_21__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_21__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5_20__reduce_cython__(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_20__reduce_cython__(struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__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; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + int __pyx_t_11; + int __pyx_t_12; + int __pyx_t_13; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.CENTER, self.HDF5_GROUP_DEST, self.HDF5_SNAP_DEST, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.MIN_NUMBER_STAR_PTCS, self.SAFE, self.SNAP, self.SNAP_MAX, self.WANT_RVIR, self.r200, self.start_time) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.L_BOX); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.MASS_UNIT); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx_base.MIN_NUMBER_PTCS); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->MIN_NUMBER_STAR_PTCS); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.SAFE); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->SNAP_MAX); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->WANT_RVIR); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (unlikely(!__pyx_v_self->__pyx_base.r200.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 5, __pyx_L1_error)} + __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v_self->__pyx_base.r200, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.start_time); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = PyTuple_New(13); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_INCREF(__pyx_v_self->__pyx_base.CENTER); + __Pyx_GIVEREF(__pyx_v_self->__pyx_base.CENTER); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_self->__pyx_base.CENTER); + __Pyx_INCREF(__pyx_v_self->HDF5_GROUP_DEST); + __Pyx_GIVEREF(__pyx_v_self->HDF5_GROUP_DEST); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_self->HDF5_GROUP_DEST); + __Pyx_INCREF(__pyx_v_self->HDF5_SNAP_DEST); + __Pyx_GIVEREF(__pyx_v_self->HDF5_SNAP_DEST); + PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_v_self->HDF5_SNAP_DEST); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_10, 4, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_10, 5, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_10, 6, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_10, 7, __pyx_t_5); + __Pyx_INCREF(__pyx_v_self->__pyx_base.SNAP); + __Pyx_GIVEREF(__pyx_v_self->__pyx_base.SNAP); + PyTuple_SET_ITEM(__pyx_t_10, 8, __pyx_v_self->__pyx_base.SNAP); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_10, 9, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_10, 10, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_10, 11, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_10, 12, __pyx_t_9); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_8 = 0; + __pyx_t_9 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_10); + __pyx_t_10 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.CENTER, self.HDF5_GROUP_DEST, self.HDF5_SNAP_DEST, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.MIN_NUMBER_STAR_PTCS, self.SAFE, self.SNAP, self.SNAP_MAX, self.WANT_RVIR, self.r200, self.start_time) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_10 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_v__dict = __pyx_t_10; + __pyx_t_10 = 0; + + /* "(tree fragment)":7 + * state = (self.CENTER, self.HDF5_GROUP_DEST, self.HDF5_SNAP_DEST, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.MIN_NUMBER_STAR_PTCS, self.SAFE, self.SNAP, self.SNAP_MAX, self.WANT_RVIR, self.r200, self.start_time) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_11 = (__pyx_v__dict != Py_None); + __pyx_t_12 = (__pyx_t_11 != 0); + if (__pyx_t_12) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v__dict); + __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_9)); + __pyx_t_9 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.CENTER is not None or self.HDF5_GROUP_DEST is not None or self.HDF5_SNAP_DEST is not None or self.SNAP is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.CENTER, self.HDF5_GROUP_DEST, self.HDF5_SNAP_DEST, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.MIN_NUMBER_STAR_PTCS, self.SAFE, self.SNAP, self.SNAP_MAX, self.WANT_RVIR, self.r200, self.start_time) + * _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.CENTER is not None or self.HDF5_GROUP_DEST is not None or self.HDF5_SNAP_DEST is not None or self.SNAP is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_DensProfsHDF5, (type(self), 0xc6de7a6, None), state + */ + /*else*/ { + __pyx_t_11 = (__pyx_v_self->__pyx_base.CENTER != ((PyObject*)Py_None)); + __pyx_t_13 = (__pyx_t_11 != 0); + if (!__pyx_t_13) { + } else { + __pyx_t_12 = __pyx_t_13; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_13 = (__pyx_v_self->HDF5_GROUP_DEST != ((PyObject*)Py_None)); + __pyx_t_11 = (__pyx_t_13 != 0); + if (!__pyx_t_11) { + } else { + __pyx_t_12 = __pyx_t_11; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_11 = (__pyx_v_self->HDF5_SNAP_DEST != ((PyObject*)Py_None)); + __pyx_t_13 = (__pyx_t_11 != 0); + if (!__pyx_t_13) { + } else { + __pyx_t_12 = __pyx_t_13; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_13 = (__pyx_v_self->__pyx_base.SNAP != ((PyObject*)Py_None)); + __pyx_t_11 = (__pyx_t_13 != 0); + __pyx_t_12 = __pyx_t_11; + __pyx_L4_bool_binop_done:; + __pyx_v_use_setstate = __pyx_t_12; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.CENTER is not None or self.HDF5_GROUP_DEST is not None or self.HDF5_SNAP_DEST is not None or self.SNAP is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_DensProfsHDF5, (type(self), 0xc6de7a6, None), state + * else: + */ + __pyx_t_12 = (__pyx_v_use_setstate != 0); + if (__pyx_t_12) { + + /* "(tree fragment)":13 + * use_setstate = self.CENTER is not None or self.HDF5_GROUP_DEST is not None or self.HDF5_SNAP_DEST is not None or self.SNAP is not None + * if use_setstate: + * return __pyx_unpickle_DensProfsHDF5, (type(self), 0xc6de7a6, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_DensProfsHDF5, (type(self), 0xc6de7a6, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pyx_unpickle_DensProfsHDF5); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_10, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_208529318); + __Pyx_GIVEREF(__pyx_int_208529318); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_int_208529318); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_10, 2, Py_None); + __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); + __Pyx_GIVEREF(__pyx_t_10); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_10); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_state); + __pyx_t_9 = 0; + __pyx_t_10 = 0; + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.CENTER is not None or self.HDF5_GROUP_DEST is not None or self.HDF5_SNAP_DEST is not None or self.SNAP is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_DensProfsHDF5, (type(self), 0xc6de7a6, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_DensProfsHDF5, (type(self), 0xc6de7a6, None), state + * else: + * return __pyx_unpickle_DensProfsHDF5, (type(self), 0xc6de7a6, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_DensProfsHDF5__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pyx_unpickle_DensProfsHDF5); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_10, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_208529318); + __Pyx_GIVEREF(__pyx_int_208529318); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_int_208529318); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_v_state); + __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_10); + PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_10); + __pyx_t_8 = 0; + __pyx_t_10 = 0; + __pyx_r = __pyx_t_9; + __pyx_t_9 = 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_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("common.profile_classes.DensProfsHDF5.__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_DensProfsHDF5, (type(self), 0xc6de7a6, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_DensProfsHDF5__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_23__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_6common_15profile_classes_13DensProfsHDF5_23__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_13DensProfsHDF5_22__setstate_cython__(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_13DensProfsHDF5_22__setstate_cython__(struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__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__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_DensProfsHDF5, (type(self), 0xc6de7a6, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_DensProfsHDF5__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_6common_15profile_classes___pyx_unpickle_DensProfsHDF5__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_DensProfsHDF5, (type(self), 0xc6de7a6, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_DensProfsHDF5__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("common.profile_classes.DensProfsHDF5.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1091 + * cdef int N_MIN + * + * def __init__(self, str HDF5_SNAP_DEST, str HDF5_GROUP_DEST, str SNAP, int SNAP_MAX, float L_BOX, int MIN_NUMBER_PTCS, int MIN_NUMBER_STAR_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str CENTER, bint WANT_RVIR): # <<<<<<<<<<<<<< + * """ + * :param HDF5_SNAP_DEST: where we can find the snapshot + */ + +/* Python wrapper */ +static int __pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5___init__[] = "\n :param HDF5_SNAP_DEST: where we can find the snapshot\n :type HDF5_SNAP_DEST: string\n :param HDF5_GROUP_DEST: where we can find the group files\n :type HDF5_GROUP_DEST: string\n :param SNAP: e.g. '024'\n :type SNAP: string\n :param SNAP_MAX: e.g. 16\n :type SNAP_MAX: int\n :param SNAP: snapshot identifier, e.g. '024'\n :type SNAP: string\n :param L_BOX: simulation box side length\n :type L_BOX: float, units: Mpc/h\n :param MIN_NUMBER_PTCS: minimum number of DM particles for halo to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param MIN_NUMBER_STAR_PTCS: minimum number of star particles for galaxy to qualify for morphology calculation\n :type MIN_NUMBER_STAR_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest minus 1 (i.e. number of bins)\n :type D_BINS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param CENTER: shape quantities will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str\n :param WANT_RVIR: Whether or not we want quantities (e.g. D_LOGSTART) expressed \n with respect to the virial radius R_vir or the overdens""ity radius R_200\n :type WANT_RVIR: boolean"; +#if CYTHON_COMPILING_IN_CPYTHON +struct wrapperbase __pyx_wrapperbase_6common_15profile_classes_18DensShapeProfsHDF5___init__; +#endif +static int __pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_HDF5_SNAP_DEST = 0; + PyObject *__pyx_v_HDF5_GROUP_DEST = 0; + PyObject *__pyx_v_SNAP = 0; + int __pyx_v_SNAP_MAX; + float __pyx_v_L_BOX; + int __pyx_v_MIN_NUMBER_PTCS; + int __pyx_v_MIN_NUMBER_STAR_PTCS; + int __pyx_v_D_LOGSTART; + int __pyx_v_D_LOGEND; + int __pyx_v_D_BINS; + float __pyx_v_M_TOL; + int __pyx_v_N_WALL; + int __pyx_v_N_MIN; + PyObject *__pyx_v_CENTER = 0; + int __pyx_v_WANT_RVIR; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_HDF5_SNAP_DEST,&__pyx_n_s_HDF5_GROUP_DEST,&__pyx_n_s_SNAP,&__pyx_n_s_SNAP_MAX,&__pyx_n_s_L_BOX,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_MIN_NUMBER_STAR_PTCS,&__pyx_n_s_D_LOGSTART,&__pyx_n_s_D_LOGEND,&__pyx_n_s_D_BINS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_CENTER,&__pyx_n_s_WANT_RVIR,0}; + PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HDF5_SNAP_DEST)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HDF5_GROUP_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 1); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_SNAP)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 2); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_SNAP_MAX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 3); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 4); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 5); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_STAR_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 6); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGSTART)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 7); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGEND)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 8); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 9); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 10); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 11); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 12); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 13); __PYX_ERR(0, 1091, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_WANT_RVIR)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, 14); __PYX_ERR(0, 1091, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1091, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 15) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + } + __pyx_v_HDF5_SNAP_DEST = ((PyObject*)values[0]); + __pyx_v_HDF5_GROUP_DEST = ((PyObject*)values[1]); + __pyx_v_SNAP = ((PyObject*)values[2]); + __pyx_v_SNAP_MAX = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_SNAP_MAX == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error) + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error) + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error) + __pyx_v_MIN_NUMBER_STAR_PTCS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_MIN_NUMBER_STAR_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error) + __pyx_v_D_LOGSTART = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_D_LOGSTART == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error) + __pyx_v_D_LOGEND = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_D_LOGEND == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error) + __pyx_v_D_BINS = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_D_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error) + __pyx_v_M_TOL = __pyx_PyFloat_AsFloat(values[10]); if (unlikely((__pyx_v_M_TOL == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[11]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[12]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[13]); + __pyx_v_WANT_RVIR = __Pyx_PyObject_IsTrue(values[14]); if (unlikely((__pyx_v_WANT_RVIR == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 15, 15, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1091, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_HDF5_SNAP_DEST), (&PyUnicode_Type), 1, "HDF5_SNAP_DEST", 1))) __PYX_ERR(0, 1091, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_HDF5_GROUP_DEST), (&PyUnicode_Type), 1, "HDF5_GROUP_DEST", 1))) __PYX_ERR(0, 1091, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_SNAP), (&PyUnicode_Type), 1, "SNAP", 1))) __PYX_ERR(0, 1091, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 1091, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5___init__(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_HDF5_SNAP_DEST, __pyx_v_HDF5_GROUP_DEST, __pyx_v_SNAP, __pyx_v_SNAP_MAX, __pyx_v_L_BOX, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_MIN_NUMBER_STAR_PTCS, __pyx_v_D_LOGSTART, __pyx_v_D_LOGEND, __pyx_v_D_BINS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_CENTER, __pyx_v_WANT_RVIR); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5___init__(struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, PyObject *__pyx_v_HDF5_SNAP_DEST, PyObject *__pyx_v_HDF5_GROUP_DEST, PyObject *__pyx_v_SNAP, int __pyx_v_SNAP_MAX, float __pyx_v_L_BOX, int __pyx_v_MIN_NUMBER_PTCS, int __pyx_v_MIN_NUMBER_STAR_PTCS, int __pyx_v_D_LOGSTART, int __pyx_v_D_LOGEND, int __pyx_v_D_BINS, float __pyx_v_M_TOL, int __pyx_v_N_WALL, int __pyx_v_N_MIN, PyObject *__pyx_v_CENTER, int __pyx_v_WANT_RVIR) { + int __pyx_r; + __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; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "common/profile_classes.pyx":1129 + * with respect to the virial radius R_vir or the overdensity radius R_200 + * :type WANT_RVIR: boolean""" + * super().__init__(HDF5_SNAP_DEST, HDF5_GROUP_DEST, SNAP, SNAP_MAX, L_BOX, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, CENTER, WANT_RVIR) # <<<<<<<<<<<<<< + * self.D_LOGSTART = D_LOGSTART + * self.D_LOGEND = D_LOGEND + */ + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)__pyx_ptype_6common_15profile_classes_DensShapeProfsHDF5)); + __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6common_15profile_classes_DensShapeProfsHDF5)); + PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_6common_15profile_classes_DensShapeProfsHDF5)); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self)); + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_SNAP_MAX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_L_BOX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_MIN_NUMBER_PTCS); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_MIN_NUMBER_STAR_PTCS); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_WANT_RVIR); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_9 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[10] = {__pyx_t_8, __pyx_v_HDF5_SNAP_DEST, __pyx_v_HDF5_GROUP_DEST, __pyx_v_SNAP, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_v_CENTER, __pyx_t_7}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 9+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[10] = {__pyx_t_8, __pyx_v_HDF5_SNAP_DEST, __pyx_v_HDF5_GROUP_DEST, __pyx_v_SNAP, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_v_CENTER, __pyx_t_7}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 9+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } else + #endif + { + __pyx_t_10 = PyTuple_New(9+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + if (__pyx_t_8) { + __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL; + } + __Pyx_INCREF(__pyx_v_HDF5_SNAP_DEST); + __Pyx_GIVEREF(__pyx_v_HDF5_SNAP_DEST); + PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_v_HDF5_SNAP_DEST); + __Pyx_INCREF(__pyx_v_HDF5_GROUP_DEST); + __Pyx_GIVEREF(__pyx_v_HDF5_GROUP_DEST); + PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_v_HDF5_GROUP_DEST); + __Pyx_INCREF(__pyx_v_SNAP); + __Pyx_GIVEREF(__pyx_v_SNAP); + PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_v_SNAP); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_9, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_10, 4+__pyx_t_9, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_10, 5+__pyx_t_9, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_10, 6+__pyx_t_9, __pyx_t_6); + __Pyx_INCREF(__pyx_v_CENTER); + __Pyx_GIVEREF(__pyx_v_CENTER); + PyTuple_SET_ITEM(__pyx_t_10, 7+__pyx_t_9, __pyx_v_CENTER); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_10, 8+__pyx_t_9, __pyx_t_7); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "common/profile_classes.pyx":1130 + * :type WANT_RVIR: boolean""" + * super().__init__(HDF5_SNAP_DEST, HDF5_GROUP_DEST, SNAP, SNAP_MAX, L_BOX, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, CENTER, WANT_RVIR) + * self.D_LOGSTART = D_LOGSTART # <<<<<<<<<<<<<< + * self.D_LOGEND = D_LOGEND + * self.D_BINS = D_BINS + */ + __pyx_v_self->D_LOGSTART = __pyx_v_D_LOGSTART; + + /* "common/profile_classes.pyx":1131 + * super().__init__(HDF5_SNAP_DEST, HDF5_GROUP_DEST, SNAP, SNAP_MAX, L_BOX, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, CENTER, WANT_RVIR) + * self.D_LOGSTART = D_LOGSTART + * self.D_LOGEND = D_LOGEND # <<<<<<<<<<<<<< + * self.D_BINS = D_BINS + * self.M_TOL = M_TOL + */ + __pyx_v_self->D_LOGEND = __pyx_v_D_LOGEND; + + /* "common/profile_classes.pyx":1132 + * self.D_LOGSTART = D_LOGSTART + * self.D_LOGEND = D_LOGEND + * self.D_BINS = D_BINS # <<<<<<<<<<<<<< + * self.M_TOL = M_TOL + * self.N_WALL = N_WALL + */ + __pyx_v_self->D_BINS = __pyx_v_D_BINS; + + /* "common/profile_classes.pyx":1133 + * self.D_LOGEND = D_LOGEND + * self.D_BINS = D_BINS + * self.M_TOL = M_TOL # <<<<<<<<<<<<<< + * self.N_WALL = N_WALL + * self.N_MIN = N_MIN + */ + __pyx_v_self->M_TOL = __pyx_v_M_TOL; + + /* "common/profile_classes.pyx":1134 + * self.D_BINS = D_BINS + * self.M_TOL = M_TOL + * self.N_WALL = N_WALL # <<<<<<<<<<<<<< + * self.N_MIN = N_MIN + * + */ + __pyx_v_self->N_WALL = __pyx_v_N_WALL; + + /* "common/profile_classes.pyx":1135 + * self.M_TOL = M_TOL + * self.N_WALL = N_WALL + * self.N_MIN = N_MIN # <<<<<<<<<<<<<< + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): + */ + __pyx_v_self->N_MIN = __pyx_v_N_MIN; + + /* "common/profile_classes.pyx":1091 + * cdef int N_MIN + * + * def __init__(self, str HDF5_SNAP_DEST, str HDF5_GROUP_DEST, str SNAP, int SNAP_MAX, float L_BOX, int MIN_NUMBER_PTCS, int MIN_NUMBER_STAR_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, float M_TOL, int N_WALL, int N_MIN, str CENTER, bint WANT_RVIR): # <<<<<<<<<<<<<< + * """ + * :param HDF5_SNAP_DEST: where we can find the snapshot + */ + + /* function exit code */ + __pyx_r = 0; + 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_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1137 + * self.N_MIN = N_MIN + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get direct-binning-based density profiles + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_3getDensProfsDirectBinning(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_2getDensProfsDirectBinning[] = " Get direct-binning-based density profiles\n \n :param ROverR200: normalized radii at which ``dens_profs`` are defined\n :type ROverR200: (r_res,) floats\n :param spherical: whether or not spherical shell-based or ellipsoidal shell-based\n :type spherical: boolean\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return: density profiles\n :rtype: (N2, r_res) floats"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_3getDensProfsDirectBinning(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_ROverR200 = 0; + CYTHON_UNUSED int __pyx_v_spherical; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsDirectBinning (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ROverR200,&__pyx_n_s_spherical,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,&__pyx_n_s_obj_type,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[4] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spherical); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDensProfsDirectBinning") < 0)) __PYX_ERR(0, 1137, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_ROverR200 = values[0]; + if (values[1]) { + __pyx_v_spherical = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_spherical == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1137, __pyx_L3_error) + } else { + __pyx_v_spherical = ((int)1); + } + if (values[2]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1137, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[3]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1137, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[4]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getDensProfsDirectBinning", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1137, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.getDensProfsDirectBinning", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1137, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_2getDensProfsDirectBinning(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_ROverR200, __pyx_v_spherical, __pyx_v_reduced, __pyx_v_shell_based, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_2getDensProfsDirectBinning(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ROverR200, CYTHON_UNUSED int __pyx_v_spherical, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getDensProfsDirectBinning", 0); + + /* "common/profile_classes.pyx":1152 + * :return: density profiles + * :rtype: (N2, r_res) floats""" + * return # <<<<<<<<<<<<<< + * + * def getShapeCatLocal(self, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1137 + * self.N_MIN = N_MIN + * + * def getDensProfsDirectBinning(self, ROverR200, bint spherical = True, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get direct-binning-based density profiles + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1154 + * return + * + * def getShapeCatLocal(self, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get all relevant local shape data + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_5getShapeCatLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_4getShapeCatLocal[] = " Get all relevant local shape data\n \n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return: d, q, s, minor, inter, major, obj_center, obj_m\n :rtype: 3 x (number_of_objs, D_BINS+1) float arrays, \n 3 x (number_of_objs, D_BINS+1, 3) float arrays, \n (number_of_objs,3) float array, (number_of_objs,) float array"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_5getShapeCatLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatLocal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_reduced,&__pyx_n_s_shell_based,&__pyx_n_s_obj_type,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[0] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getShapeCatLocal") < 0)) __PYX_ERR(0, 1154, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + if (values[0]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1154, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[1]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1154, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[2]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getShapeCatLocal", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1154, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.getShapeCatLocal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1154, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_4getShapeCatLocal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_reduced, __pyx_v_shell_based, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_4getShapeCatLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatLocal", 0); + + /* "common/profile_classes.pyx":1167 + * 3 x (number_of_objs, D_BINS+1, 3) float arrays, + * (number_of_objs,3) float array, (number_of_objs,) float array""" + * return # <<<<<<<<<<<<<< + * + * def getShapeCatGlobal(self, bint reduced = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1154 + * return + * + * def getShapeCatLocal(self, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get all relevant local shape data + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1169 + * return + * + * def getShapeCatGlobal(self, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get all relevant global shape data + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_7getShapeCatGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_6getShapeCatGlobal[] = " Get all relevant global shape data\n \n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return: d, q, s, minor, inter, major, obj_center, obj_m\n :rtype: 3 x (number_of_objs, D_BINS+1) float arrays, \n 3 x (number_of_objs, D_BINS+1, 3) float arrays, \n (number_of_objs,3) float array, (number_of_objs,) float array"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_7getShapeCatGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatGlobal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_reduced,&__pyx_n_s_obj_type,0}; + PyObject* values[2] = {0,0}; + values[1] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[0] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getShapeCatGlobal") < 0)) __PYX_ERR(0, 1169, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + if (values[0]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1169, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[1]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getShapeCatGlobal", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1169, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.getShapeCatGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1169, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_6getShapeCatGlobal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_reduced, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_6getShapeCatGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatGlobal", 0); + + /* "common/profile_classes.pyx":1180 + * 3 x (number_of_objs, D_BINS+1, 3) float arrays, + * (number_of_objs,3) float array, (number_of_objs,) float array""" + * return # <<<<<<<<<<<<<< + * + * def getShapeCatVelLocal(self, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1169 + * return + * + * def getShapeCatGlobal(self, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get all relevant global shape data + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1182 + * return + * + * def getShapeCatVelLocal(self, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get all relevant local velocity shape data + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_9getShapeCatVelLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_8getShapeCatVelLocal[] = " Get all relevant local velocity shape data\n \n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return: d, q, s, minor, inter, major, obj_center, obj_m\n :rtype: 3 x (number_of_objs, D_BINS+1) float arrays, \n 3 x (number_of_objs, D_BINS+1, 3) float arrays, \n (number_of_objs,3) float array, (number_of_objs,) float array"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_9getShapeCatVelLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatVelLocal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_reduced,&__pyx_n_s_shell_based,&__pyx_n_s_obj_type,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[0] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getShapeCatVelLocal") < 0)) __PYX_ERR(0, 1182, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + if (values[0]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1182, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[1]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1182, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[2]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getShapeCatVelLocal", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1182, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.getShapeCatVelLocal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1182, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_8getShapeCatVelLocal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_reduced, __pyx_v_shell_based, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_8getShapeCatVelLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatVelLocal", 0); + + /* "common/profile_classes.pyx":1195 + * 3 x (number_of_objs, D_BINS+1, 3) float arrays, + * (number_of_objs,3) float array, (number_of_objs,) float array""" + * return # <<<<<<<<<<<<<< + * + * def getShapeCatVelGlobal(self, bint reduced = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1182 + * return + * + * def getShapeCatVelLocal(self, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get all relevant local velocity shape data + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1197 + * return + * + * def getShapeCatVelGlobal(self, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get all relevant global velocity shape data + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_11getShapeCatVelGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_10getShapeCatVelGlobal[] = " Get all relevant global velocity shape data\n \n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string\n :return: d, q, s, minor, inter, major, obj_center, obj_m\n :rtype: 3 x (number_of_objs, D_BINS+1) float arrays, \n 3 x (number_of_objs, D_BINS+1, 3) float arrays, \n (number_of_objs,3) float array, (number_of_objs,) float array,\n "; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_11getShapeCatVelGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatVelGlobal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_reduced,&__pyx_n_s_obj_type,0}; + PyObject* values[2] = {0,0}; + values[1] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[0] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getShapeCatVelGlobal") < 0)) __PYX_ERR(0, 1197, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + if (values[0]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1197, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[1]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getShapeCatVelGlobal", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1197, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.getShapeCatVelGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1197, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_10getShapeCatVelGlobal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_reduced, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_10getShapeCatVelGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getShapeCatVelGlobal", 0); + + /* "common/profile_classes.pyx":1209 + * (number_of_objs,3) float array, (number_of_objs,) float array, + * """ + * return # <<<<<<<<<<<<<< + * + * def vizLocalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1197 + * return + * + * def getShapeCatVelGlobal(self, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Get all relevant global velocity shape data + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1211 + * return + * + * def vizLocalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Visualize local shape of objects with numbers ``obj_numbers`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_13vizLocalShapes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_12vizLocalShapes[] = " Visualize local shape of objects with numbers ``obj_numbers``\n \n :param obj_numbers: list of object indices for which to visualize local shapes\n :type obj_numbers: list of int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: strings\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_13vizLocalShapes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_obj_numbers = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("vizLocalShapes (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj_numbers,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,&__pyx_n_s_obj_type,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[4] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_numbers)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("vizLocalShapes", 0, 2, 5, 1); __PYX_ERR(0, 1211, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "vizLocalShapes") < 0)) __PYX_ERR(0, 1211, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj_numbers = values[0]; + __pyx_v_VIZ_DEST = ((PyObject*)values[1]); + if (values[2]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1211, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[3]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1211, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[4]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("vizLocalShapes", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1211, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.vizLocalShapes", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 1211, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1211, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_12vizLocalShapes(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_obj_numbers, __pyx_v_VIZ_DEST, __pyx_v_reduced, __pyx_v_shell_based, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_12vizLocalShapes(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_numbers, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("vizLocalShapes", 0); + + /* "common/profile_classes.pyx":1224 + * :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * def vizGlobalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1211 + * return + * + * def vizLocalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Visualize local shape of objects with numbers ``obj_numbers`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1226 + * return + * + * def vizGlobalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Visualize global shape of objects with numbers ``obj_numbers`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_15vizGlobalShapes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_14vizGlobalShapes[] = " Visualize global shape of objects with numbers ``obj_numbers``\n \n :param obj_numbers: list of object indices for which to visualize global shapes\n :type obj_numbers: list of ints\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_15vizGlobalShapes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_obj_numbers = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("vizGlobalShapes (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj_numbers,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_reduced,&__pyx_n_s_obj_type,0}; + PyObject* values[4] = {0,0,0,0}; + values[3] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_numbers)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("vizGlobalShapes", 0, 2, 4, 1); __PYX_ERR(0, 1226, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[3] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "vizGlobalShapes") < 0)) __PYX_ERR(0, 1226, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj_numbers = values[0]; + __pyx_v_VIZ_DEST = ((PyObject*)values[1]); + if (values[2]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1226, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[3]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("vizGlobalShapes", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1226, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.vizGlobalShapes", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 1226, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1226, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_14vizGlobalShapes(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_obj_numbers, __pyx_v_VIZ_DEST, __pyx_v_reduced, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_14vizGlobalShapes(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_numbers, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("vizGlobalShapes", 0); + + /* "common/profile_classes.pyx":1237 + * :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * def plotGlobalEpsHist(self, HIST_NB_BINS, str VIZ_DEST, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1226 + * return + * + * def vizGlobalShapes(self, obj_numbers, str VIZ_DEST, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Visualize global shape of objects with numbers ``obj_numbers`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1239 + * return + * + * def plotGlobalEpsHist(self, HIST_NB_BINS, str VIZ_DEST, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Plot global ellipticity histogram + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_17plotGlobalEpsHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_16plotGlobalEpsHist[] = " Plot global ellipticity histogram\n \n :param HIST_NB_BINS: number of histogram bins\n :type HIST_NB_BINS: int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_17plotGlobalEpsHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotGlobalEpsHist (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_HIST_NB_BINS,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_obj_type,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HIST_NB_BINS)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalEpsHist", 0, 2, 3, 1); __PYX_ERR(0, 1239, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotGlobalEpsHist") < 0)) __PYX_ERR(0, 1239, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_HIST_NB_BINS = values[0]; + __pyx_v_VIZ_DEST = ((PyObject*)values[1]); + __pyx_v_obj_type = ((PyObject*)values[2]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotGlobalEpsHist", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1239, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.plotGlobalEpsHist", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 1239, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1239, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_16plotGlobalEpsHist(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_HIST_NB_BINS, __pyx_v_VIZ_DEST, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_16plotGlobalEpsHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotGlobalEpsHist", 0); + + /* "common/profile_classes.pyx":1248 + * :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * def plotLocalEpsHist(self, frac_r200, HIST_NB_BINS, str VIZ_DEST, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1239 + * return + * + * def plotGlobalEpsHist(self, HIST_NB_BINS, str VIZ_DEST, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Plot global ellipticity histogram + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1250 + * return + * + * def plotLocalEpsHist(self, frac_r200, HIST_NB_BINS, str VIZ_DEST, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Plot local ellipticity histogram at depth ``frac_r200`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_19plotLocalEpsHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_18plotLocalEpsHist[] = " Plot local ellipticity histogram at depth ``frac_r200``\n \n :param frac_r200: depth of objects to plot ellipticity, in units of R200\n :type frac_r200: float\n :param HIST_NB_BINS: number of histogram bins\n :type HIST_NB_BINS: int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_19plotLocalEpsHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_frac_r200 = 0; + CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotLocalEpsHist (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frac_r200,&__pyx_n_s_HIST_NB_BINS,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_obj_type,0}; + PyObject* values[4] = {0,0,0,0}; + values[3] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frac_r200)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HIST_NB_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalEpsHist", 0, 3, 4, 1); __PYX_ERR(0, 1250, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalEpsHist", 0, 3, 4, 2); __PYX_ERR(0, 1250, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[3] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotLocalEpsHist") < 0)) __PYX_ERR(0, 1250, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_frac_r200 = values[0]; + __pyx_v_HIST_NB_BINS = values[1]; + __pyx_v_VIZ_DEST = ((PyObject*)values[2]); + __pyx_v_obj_type = ((PyObject*)values[3]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotLocalEpsHist", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1250, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.plotLocalEpsHist", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 1250, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1250, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_18plotLocalEpsHist(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_frac_r200, __pyx_v_HIST_NB_BINS, __pyx_v_VIZ_DEST, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_18plotLocalEpsHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_frac_r200, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotLocalEpsHist", 0); + + /* "common/profile_classes.pyx":1261 + * :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * def plotLocalTHist(self, HIST_NB_BINS, str VIZ_DEST, frac_r200, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1250 + * return + * + * def plotLocalEpsHist(self, frac_r200, HIST_NB_BINS, str VIZ_DEST, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Plot local ellipticity histogram at depth ``frac_r200`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1263 + * return + * + * def plotLocalTHist(self, HIST_NB_BINS, str VIZ_DEST, frac_r200, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Plot local triaxiality histogram at depth ``frac_r200`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_21plotLocalTHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_20plotLocalTHist[] = " Plot local triaxiality histogram at depth ``frac_r200``\n \n :param HIST_NB_BINS: number of histogram bins\n :type HIST_NB_BINS: int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param frac_r200: depth of objects to plot triaxiality, in units of R200\n :type frac_r200: float\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_21plotLocalTHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED PyObject *__pyx_v_frac_r200 = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotLocalTHist (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_HIST_NB_BINS,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_frac_r200,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,&__pyx_n_s_obj_type,0}; + PyObject* values[6] = {0,0,0,0,0,0}; + values[5] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HIST_NB_BINS)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHist", 0, 3, 6, 1); __PYX_ERR(0, 1263, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frac_r200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotLocalTHist", 0, 3, 6, 2); __PYX_ERR(0, 1263, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[4] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[5] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotLocalTHist") < 0)) __PYX_ERR(0, 1263, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_HIST_NB_BINS = values[0]; + __pyx_v_VIZ_DEST = ((PyObject*)values[1]); + __pyx_v_frac_r200 = values[2]; + if (values[3]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1263, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[4]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1263, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[5]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotLocalTHist", 0, 3, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1263, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.plotLocalTHist", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 1263, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1263, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_20plotLocalTHist(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_HIST_NB_BINS, __pyx_v_VIZ_DEST, __pyx_v_frac_r200, __pyx_v_reduced, __pyx_v_shell_based, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_20plotLocalTHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED PyObject *__pyx_v_frac_r200, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotLocalTHist", 0); + + /* "common/profile_classes.pyx":1278 + * :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * def plotGlobalTHist(self, HIST_NB_BINS, str VIZ_DEST, bint reduced = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1263 + * return + * + * def plotLocalTHist(self, HIST_NB_BINS, str VIZ_DEST, frac_r200, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Plot local triaxiality histogram at depth ``frac_r200`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1280 + * return + * + * def plotGlobalTHist(self, HIST_NB_BINS, str VIZ_DEST, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Plot global triaxiality histogram + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_23plotGlobalTHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_22plotGlobalTHist[] = " Plot global triaxiality histogram\n \n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param HIST_NB_BINS: number of histogram bins\n :type HIST_NB_BINS: int\n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_23plotGlobalTHist(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS = 0; + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotGlobalTHist (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_HIST_NB_BINS,&__pyx_n_s_VIZ_DEST,&__pyx_n_s_reduced,&__pyx_n_s_obj_type,0}; + PyObject* values[4] = {0,0,0,0}; + values[3] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HIST_NB_BINS)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("plotGlobalTHist", 0, 2, 4, 1); __PYX_ERR(0, 1280, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[3] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotGlobalTHist") < 0)) __PYX_ERR(0, 1280, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_HIST_NB_BINS = values[0]; + __pyx_v_VIZ_DEST = ((PyObject*)values[1]); + if (values[2]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1280, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[3]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotGlobalTHist", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1280, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.plotGlobalTHist", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 1280, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1280, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_22plotGlobalTHist(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_HIST_NB_BINS, __pyx_v_VIZ_DEST, __pyx_v_reduced, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_22plotGlobalTHist(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_HIST_NB_BINS, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotGlobalTHist", 0); + + /* "common/profile_classes.pyx":1291 + * :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * def plotShapeProfs(self, str VIZ_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1280 + * return + * + * def plotGlobalTHist(self, HIST_NB_BINS, str VIZ_DEST, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Plot global triaxiality histogram + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1293 + * return + * + * def plotShapeProfs(self, str VIZ_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Draws shape profiles, also mass bin-decomposed ones + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_25plotShapeProfs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_24plotShapeProfs[] = " Draws shape profiles, also mass bin-decomposed ones\n \n :param VIZ_DEST: visualization folder\n :type VIZ_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_25plotShapeProfs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotShapeProfs (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_VIZ_DEST,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,&__pyx_n_s_obj_type,0}; + PyObject* values[4] = {0,0,0,0}; + values[3] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIZ_DEST)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[3] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "plotShapeProfs") < 0)) __PYX_ERR(0, 1293, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_VIZ_DEST = ((PyObject*)values[0]); + if (values[1]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1293, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[2]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1293, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[3]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("plotShapeProfs", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1293, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.plotShapeProfs", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIZ_DEST), (&PyUnicode_Type), 1, "VIZ_DEST", 1))) __PYX_ERR(0, 1293, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1293, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_24plotShapeProfs(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_VIZ_DEST, __pyx_v_reduced, __pyx_v_shell_based, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_24plotShapeProfs(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_VIZ_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("plotShapeProfs", 0); + + /* "common/profile_classes.pyx":1304 + * :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * def dumpShapeCatLocal(self, str CAT_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1293 + * return + * + * def plotShapeProfs(self, str VIZ_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Draws shape profiles, also mass bin-decomposed ones + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1306 + * return + * + * def dumpShapeCatLocal(self, str CAT_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Dumps all relevant local shape data into ``CAT_DEST`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_27dumpShapeCatLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_26dumpShapeCatLocal[] = " Dumps all relevant local shape data into ``CAT_DEST``\n \n :param CAT_DEST: catalogue folder\n :type CAT_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_27dumpShapeCatLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatLocal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_CAT_DEST,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,&__pyx_n_s_obj_type,0}; + PyObject* values[4] = {0,0,0,0}; + values[3] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CAT_DEST)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[3] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dumpShapeCatLocal") < 0)) __PYX_ERR(0, 1306, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_CAT_DEST = ((PyObject*)values[0]); + if (values[1]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1306, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[2]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1306, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[3]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("dumpShapeCatLocal", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1306, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.dumpShapeCatLocal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CAT_DEST), (&PyUnicode_Type), 1, "CAT_DEST", 1))) __PYX_ERR(0, 1306, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1306, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_26dumpShapeCatLocal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_CAT_DEST, __pyx_v_reduced, __pyx_v_shell_based, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_26dumpShapeCatLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatLocal", 0); + + /* "common/profile_classes.pyx":1317 + * :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * def dumpShapeCatGlobal(self, str CAT_DEST, bint reduced = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1306 + * return + * + * def dumpShapeCatLocal(self, str CAT_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Dumps all relevant local shape data into ``CAT_DEST`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1319 + * return + * + * def dumpShapeCatGlobal(self, str CAT_DEST, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Dumps all relevant global shape data into ``CAT_DEST`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_29dumpShapeCatGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_28dumpShapeCatGlobal[] = " Dumps all relevant global shape data into ``CAT_DEST``\n \n :param CAT_DEST: catalogue folder\n :type CAT_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_29dumpShapeCatGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatGlobal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_CAT_DEST,&__pyx_n_s_reduced,&__pyx_n_s_obj_type,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CAT_DEST)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dumpShapeCatGlobal") < 0)) __PYX_ERR(0, 1319, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_CAT_DEST = ((PyObject*)values[0]); + if (values[1]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1319, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[2]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("dumpShapeCatGlobal", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1319, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.dumpShapeCatGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CAT_DEST), (&PyUnicode_Type), 1, "CAT_DEST", 1))) __PYX_ERR(0, 1319, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1319, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_28dumpShapeCatGlobal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_CAT_DEST, __pyx_v_reduced, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_28dumpShapeCatGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeCatGlobal", 0); + + /* "common/profile_classes.pyx":1328 + * :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * def dumpShapeVelCatLocal(self, str CAT_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1319 + * return + * + * def dumpShapeCatGlobal(self, str CAT_DEST, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Dumps all relevant global shape data into ``CAT_DEST`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1330 + * return + * + * def dumpShapeVelCatLocal(self, str CAT_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Dumps all relevant local velocity shape data into ``CAT_DEST`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_31dumpShapeVelCatLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_30dumpShapeVelCatLocal[] = " Dumps all relevant local velocity shape data into ``CAT_DEST``\n \n :param CAT_DEST: catalogue folder\n :type CAT_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_31dumpShapeVelCatLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeVelCatLocal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_CAT_DEST,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,&__pyx_n_s_obj_type,0}; + PyObject* values[4] = {0,0,0,0}; + values[3] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CAT_DEST)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[3] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dumpShapeVelCatLocal") < 0)) __PYX_ERR(0, 1330, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_CAT_DEST = ((PyObject*)values[0]); + if (values[1]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1330, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + if (values[2]) { + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1330, __pyx_L3_error) + } else { + __pyx_v_shell_based = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[3]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatLocal", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1330, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.dumpShapeVelCatLocal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CAT_DEST), (&PyUnicode_Type), 1, "CAT_DEST", 1))) __PYX_ERR(0, 1330, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1330, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_30dumpShapeVelCatLocal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_CAT_DEST, __pyx_v_reduced, __pyx_v_shell_based, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_30dumpShapeVelCatLocal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeVelCatLocal", 0); + + /* "common/profile_classes.pyx":1341 + * :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * def dumpShapeVelCatGlobal(self, str CAT_DEST, bint reduced = False, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1330 + * return + * + * def dumpShapeVelCatLocal(self, str CAT_DEST, bint reduced = False, bint shell_based = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Dumps all relevant local velocity shape data into ``CAT_DEST`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1343 + * return + * + * def dumpShapeVelCatGlobal(self, str CAT_DEST, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Dumps all relevant global velocity shape data into ``CAT_DEST`` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_33dumpShapeVelCatGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_32dumpShapeVelCatGlobal[] = " Dumps all relevant global velocity shape data into ``CAT_DEST``\n \n :param CAT_DEST: catalogue folder\n :type CAT_DEST: string\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at\n :type obj_type: string"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_33dumpShapeVelCatGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeVelCatGlobal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_CAT_DEST,&__pyx_n_s_reduced,&__pyx_n_s_obj_type,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CAT_DEST)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dumpShapeVelCatGlobal") < 0)) __PYX_ERR(0, 1343, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_CAT_DEST = ((PyObject*)values[0]); + if (values[1]) { + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1343, __pyx_L3_error) + } else { + __pyx_v_reduced = ((int)0); + } + __pyx_v_obj_type = ((PyObject*)values[2]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("dumpShapeVelCatGlobal", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1343, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.dumpShapeVelCatGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CAT_DEST), (&PyUnicode_Type), 1, "CAT_DEST", 1))) __PYX_ERR(0, 1343, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1343, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_32dumpShapeVelCatGlobal(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_CAT_DEST, __pyx_v_reduced, __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_32dumpShapeVelCatGlobal(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_CAT_DEST, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("dumpShapeVelCatGlobal", 0); + + /* "common/profile_classes.pyx":1352 + * :param obj_type: either 'dm' or 'gx', depending on what catalogue we are looking at + * :type obj_type: string""" + * return # <<<<<<<<<<<<<< + * + * def getObjInfo(self, str obj_type = 'dm'): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1343 + * return + * + * def dumpShapeVelCatGlobal(self, str CAT_DEST, bint reduced = False, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Dumps all relevant global velocity shape data into ``CAT_DEST`` + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "common/profile_classes.pyx":1354 + * return + * + * def getObjInfo(self, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Print basic info about the objects used for local shape estimation such as number of converged objects""" + * return + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_35getObjInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_34getObjInfo[] = " Print basic info about the objects used for local shape estimation such as number of converged objects"; +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_35getObjInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_obj_type = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getObjInfo (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj_type,0}; + PyObject* values[1] = {0}; + values[0] = ((PyObject*)__pyx_n_u_dm); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_type); + if (value) { values[0] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getObjInfo") < 0)) __PYX_ERR(0, 1354, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj_type = ((PyObject*)values[0]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("getObjInfo", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1354, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.getObjInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj_type), (&PyUnicode_Type), 1, "obj_type", 1))) __PYX_ERR(0, 1354, __pyx_L1_error) + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_34getObjInfo(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), __pyx_v_obj_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_34getObjInfo(CYTHON_UNUSED struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_obj_type) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("getObjInfo", 0); + + /* "common/profile_classes.pyx":1356 + * def getObjInfo(self, str obj_type = 'dm'): + * """ Print basic info about the objects used for local shape estimation such as number of converged objects""" + * return # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "common/profile_classes.pyx":1354 + * return + * + * def getObjInfo(self, str obj_type = 'dm'): # <<<<<<<<<<<<<< + * """ Print basic info about the objects used for local shape estimation such as number of converged objects""" + * return + */ + + /* function exit code */ + __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_6common_15profile_classes_18DensShapeProfsHDF5_37__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_37__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_36__reduce_cython__(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_36__reduce_cython__(struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__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; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + 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; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + int __pyx_t_17; + int __pyx_t_18; + int __pyx_t_19; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.CENTER, self.D_BINS, self.D_LOGEND, self.D_LOGSTART, self.HDF5_GROUP_DEST, self.HDF5_SNAP_DEST, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.MIN_NUMBER_STAR_PTCS, self.M_TOL, self.N_MIN, self.N_WALL, self.SAFE, self.SNAP, self.SNAP_MAX, self.WANT_RVIR, self.r200, self.start_time) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->D_BINS); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->D_LOGEND); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->D_LOGSTART); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.__pyx_base.L_BOX); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.__pyx_base.MASS_UNIT); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx_base.__pyx_base.MIN_NUMBER_PTCS); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx_base.MIN_NUMBER_STAR_PTCS); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = PyFloat_FromDouble(__pyx_v_self->M_TOL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_self->N_MIN); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_self->N_WALL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.__pyx_base.SAFE); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_self->__pyx_base.SNAP_MAX); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyBool_FromLong(__pyx_v_self->__pyx_base.WANT_RVIR); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + if (unlikely(!__pyx_v_self->__pyx_base.__pyx_base.r200.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 5, __pyx_L1_error)} + __pyx_t_14 = __pyx_memoryview_fromslice(__pyx_v_self->__pyx_base.__pyx_base.r200, 1, (PyObject *(*)(char *)) __pyx_memview_get_float, (int (*)(char *, PyObject *)) __pyx_memview_set_float, 0);; if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = PyFloat_FromDouble(__pyx_v_self->__pyx_base.__pyx_base.start_time); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_16 = PyTuple_New(19); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_INCREF(__pyx_v_self->__pyx_base.__pyx_base.CENTER); + __Pyx_GIVEREF(__pyx_v_self->__pyx_base.__pyx_base.CENTER); + PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_v_self->__pyx_base.__pyx_base.CENTER); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_16, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_16, 3, __pyx_t_3); + __Pyx_INCREF(__pyx_v_self->__pyx_base.HDF5_GROUP_DEST); + __Pyx_GIVEREF(__pyx_v_self->__pyx_base.HDF5_GROUP_DEST); + PyTuple_SET_ITEM(__pyx_t_16, 4, __pyx_v_self->__pyx_base.HDF5_GROUP_DEST); + __Pyx_INCREF(__pyx_v_self->__pyx_base.HDF5_SNAP_DEST); + __Pyx_GIVEREF(__pyx_v_self->__pyx_base.HDF5_SNAP_DEST); + PyTuple_SET_ITEM(__pyx_t_16, 5, __pyx_v_self->__pyx_base.HDF5_SNAP_DEST); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_16, 6, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_16, 7, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_16, 8, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_16, 9, __pyx_t_7); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_16, 10, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_16, 11, __pyx_t_9); + __Pyx_GIVEREF(__pyx_t_10); + PyTuple_SET_ITEM(__pyx_t_16, 12, __pyx_t_10); + __Pyx_GIVEREF(__pyx_t_11); + PyTuple_SET_ITEM(__pyx_t_16, 13, __pyx_t_11); + __Pyx_INCREF(__pyx_v_self->__pyx_base.__pyx_base.SNAP); + __Pyx_GIVEREF(__pyx_v_self->__pyx_base.__pyx_base.SNAP); + PyTuple_SET_ITEM(__pyx_t_16, 14, __pyx_v_self->__pyx_base.__pyx_base.SNAP); + __Pyx_GIVEREF(__pyx_t_12); + PyTuple_SET_ITEM(__pyx_t_16, 15, __pyx_t_12); + __Pyx_GIVEREF(__pyx_t_13); + PyTuple_SET_ITEM(__pyx_t_16, 16, __pyx_t_13); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_16, 17, __pyx_t_14); + __Pyx_GIVEREF(__pyx_t_15); + PyTuple_SET_ITEM(__pyx_t_16, 18, __pyx_t_15); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __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_t_14 = 0; + __pyx_t_15 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_16); + __pyx_t_16 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.CENTER, self.D_BINS, self.D_LOGEND, self.D_LOGSTART, self.HDF5_GROUP_DEST, self.HDF5_SNAP_DEST, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.MIN_NUMBER_STAR_PTCS, self.M_TOL, self.N_MIN, self.N_WALL, self.SAFE, self.SNAP, self.SNAP_MAX, self.WANT_RVIR, self.r200, self.start_time) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_16 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_v__dict = __pyx_t_16; + __pyx_t_16 = 0; + + /* "(tree fragment)":7 + * state = (self.CENTER, self.D_BINS, self.D_LOGEND, self.D_LOGSTART, self.HDF5_GROUP_DEST, self.HDF5_SNAP_DEST, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.MIN_NUMBER_STAR_PTCS, self.M_TOL, self.N_MIN, self.N_WALL, self.SAFE, self.SNAP, self.SNAP_MAX, self.WANT_RVIR, self.r200, self.start_time) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_17 = (__pyx_v__dict != Py_None); + __pyx_t_18 = (__pyx_t_17 != 0); + if (__pyx_t_18) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_v__dict); + __pyx_t_15 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_15)); + __pyx_t_15 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.CENTER is not None or self.HDF5_GROUP_DEST is not None or self.HDF5_SNAP_DEST is not None or self.SNAP is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.CENTER, self.D_BINS, self.D_LOGEND, self.D_LOGSTART, self.HDF5_GROUP_DEST, self.HDF5_SNAP_DEST, self.L_BOX, self.MASS_UNIT, self.MIN_NUMBER_PTCS, self.MIN_NUMBER_STAR_PTCS, self.M_TOL, self.N_MIN, self.N_WALL, self.SAFE, self.SNAP, self.SNAP_MAX, self.WANT_RVIR, self.r200, self.start_time) + * _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.CENTER is not None or self.HDF5_GROUP_DEST is not None or self.HDF5_SNAP_DEST is not None or self.SNAP is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_DensShapeProfsHDF5, (type(self), 0x008ea9b, None), state + */ + /*else*/ { + __pyx_t_17 = (__pyx_v_self->__pyx_base.__pyx_base.CENTER != ((PyObject*)Py_None)); + __pyx_t_19 = (__pyx_t_17 != 0); + if (!__pyx_t_19) { + } else { + __pyx_t_18 = __pyx_t_19; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_19 = (__pyx_v_self->__pyx_base.HDF5_GROUP_DEST != ((PyObject*)Py_None)); + __pyx_t_17 = (__pyx_t_19 != 0); + if (!__pyx_t_17) { + } else { + __pyx_t_18 = __pyx_t_17; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_17 = (__pyx_v_self->__pyx_base.HDF5_SNAP_DEST != ((PyObject*)Py_None)); + __pyx_t_19 = (__pyx_t_17 != 0); + if (!__pyx_t_19) { + } else { + __pyx_t_18 = __pyx_t_19; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_19 = (__pyx_v_self->__pyx_base.__pyx_base.SNAP != ((PyObject*)Py_None)); + __pyx_t_17 = (__pyx_t_19 != 0); + __pyx_t_18 = __pyx_t_17; + __pyx_L4_bool_binop_done:; + __pyx_v_use_setstate = __pyx_t_18; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.CENTER is not None or self.HDF5_GROUP_DEST is not None or self.HDF5_SNAP_DEST is not None or self.SNAP is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_DensShapeProfsHDF5, (type(self), 0x008ea9b, None), state + * else: + */ + __pyx_t_18 = (__pyx_v_use_setstate != 0); + if (__pyx_t_18) { + + /* "(tree fragment)":13 + * use_setstate = self.CENTER is not None or self.HDF5_GROUP_DEST is not None or self.HDF5_SNAP_DEST is not None or self.SNAP is not None + * if use_setstate: + * return __pyx_unpickle_DensShapeProfsHDF5, (type(self), 0x008ea9b, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_DensShapeProfsHDF5, (type(self), 0x008ea9b, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_pyx_unpickle_DensShapeProfsHDF); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_16 = PyTuple_New(3); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_584347); + __Pyx_GIVEREF(__pyx_int_584347); + PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_int_584347); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_16, 2, Py_None); + __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_15); + PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_15); + __Pyx_GIVEREF(__pyx_t_16); + PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_16); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_v_state); + __pyx_t_15 = 0; + __pyx_t_16 = 0; + __pyx_r = __pyx_t_14; + __pyx_t_14 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.CENTER is not None or self.HDF5_GROUP_DEST is not None or self.HDF5_SNAP_DEST is not None or self.SNAP is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_DensShapeProfsHDF5, (type(self), 0x008ea9b, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_DensShapeProfsHDF5, (type(self), 0x008ea9b, None), state + * else: + * return __pyx_unpickle_DensShapeProfsHDF5, (type(self), 0x008ea9b, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_DensShapeProfsHDF5__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_pyx_unpickle_DensShapeProfsHDF); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_16 = PyTuple_New(3); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_16, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_584347); + __Pyx_GIVEREF(__pyx_int_584347); + PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_int_584347); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_16, 2, __pyx_v_state); + __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_GIVEREF(__pyx_t_14); + PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14); + __Pyx_GIVEREF(__pyx_t_16); + PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_16); + __pyx_t_14 = 0; + __pyx_t_16 = 0; + __pyx_r = __pyx_t_15; + __pyx_t_15 = 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_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_AddTraceback("common.profile_classes.DensShapeProfsHDF5.__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_DensShapeProfsHDF5, (type(self), 0x008ea9b, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_DensShapeProfsHDF5__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_39__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_39__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_38__setstate_cython__(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_18DensShapeProfsHDF5_38__setstate_cython__(struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__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__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_DensShapeProfsHDF5, (type(self), 0x008ea9b, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_DensShapeProfsHDF5__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_6common_15profile_classes___pyx_unpickle_DensShapeProfsHDF5__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_DensShapeProfsHDF5, (type(self), 0x008ea9b, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_DensShapeProfsHDF5__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("common.profile_classes.DensShapeProfsHDF5.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_CosmicBase(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_1__pyx_unpickle_CosmicBase(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6common_15profile_classes_1__pyx_unpickle_CosmicBase = {"__pyx_unpickle_CosmicBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_1__pyx_unpickle_CosmicBase, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6common_15profile_classes_1__pyx_unpickle_CosmicBase(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_CosmicBase (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_CosmicBase", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_CosmicBase", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_CosmicBase") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__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_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_CosmicBase", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_CosmicBase", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes___pyx_unpickle_CosmicBase(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes___pyx_unpickle_CosmicBase(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 + int __pyx_t_1; + 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("__pyx_unpickle_CosmicBase", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x2fb46cd: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2fb46cd = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, r200, start_time))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x2fb46cd) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0x2fb46cd: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2fb46cd = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, r200, start_time))" % __pyx_checksum) + * __pyx_result = CosmicBase.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0x2fb46cd: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2fb46cd = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, r200, start_time))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = CosmicBase.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x2f, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x2fb46cd: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2fb46cd = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, r200, start_time))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2fb46cd = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, r200, start_time))" % __pyx_checksum) + * __pyx_result = CosmicBase.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_CosmicBase__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6common_15profile_classes_CosmicBase), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2fb46cd = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, r200, start_time))" % __pyx_checksum) + * __pyx_result = CosmicBase.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_CosmicBase__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = CosmicBase.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_CosmicBase__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_CosmicBase__set_state(CosmicBase __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_f_6common_15profile_classes___pyx_unpickle_CosmicBase__set_state(((struct __pyx_obj_6common_15profile_classes_CosmicBase *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x2fb46cd = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, r200, start_time))" % __pyx_checksum) + * __pyx_result = CosmicBase.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_CosmicBase__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_CosmicBase__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_CosmicBase__set_state(CosmicBase __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.r200 = __pyx_state[6]; __pyx_result.start_time = __pyx_state[7] + */ + __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_CosmicBase(__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_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_CosmicBase", __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_CosmicBase__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_CosmicBase__set_state(CosmicBase __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.r200 = __pyx_state[6]; __pyx_result.start_time = __pyx_state[7] + * if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_6common_15profile_classes___pyx_unpickle_CosmicBase__set_state(struct __pyx_obj_6common_15profile_classes_CosmicBase *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + float __pyx_t_2; + int __pyx_t_3; + __Pyx_memviewslice __pyx_t_4 = { 0, 0, { 0 }, { 0 }, { 0 } }; + double __pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_CosmicBase__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_CosmicBase__set_state(CosmicBase __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.r200 = __pyx_state[6]; __pyx_result.start_time = __pyx_state[7] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[8]) + */ + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->CENTER); + __Pyx_DECREF(__pyx_v___pyx_result->CENTER); + __pyx_v___pyx_result->CENTER = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->L_BOX = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->MASS_UNIT = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->MIN_NUMBER_PTCS = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->SAFE = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->SNAP); + __Pyx_DECREF(__pyx_v___pyx_result->SNAP); + __pyx_v___pyx_result->SNAP = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v___pyx_result->r200, 0); + __pyx_v___pyx_result->r200 = __pyx_t_4; + __pyx_t_4.memview = NULL; + __pyx_t_4.data = NULL; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->start_time = __pyx_t_5; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_CosmicBase__set_state(CosmicBase __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.r200 = __pyx_state[6]; __pyx_result.start_time = __pyx_state[7] + * if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[8]) + */ + 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_7 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_8 = ((__pyx_t_7 > 8) != 0); + if (__pyx_t_8) { + } else { + __pyx_t_6 = __pyx_t_8; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_8 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_9 = (__pyx_t_8 != 0); + __pyx_t_6 = __pyx_t_9; + __pyx_L4_bool_binop_done:; + if (__pyx_t_6) { + + /* "(tree fragment)":14 + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.r200 = __pyx_state[6]; __pyx_result.start_time = __pyx_state[7] + * if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[8]) # <<<<<<<<<<<<<< + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_update); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 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_10 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_12 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + } + } + __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_10); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_CosmicBase__set_state(CosmicBase __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.r200 = __pyx_state[6]; __pyx_result.start_time = __pyx_state[7] + * if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[8]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_CosmicBase__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_CosmicBase__set_state(CosmicBase __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.r200 = __pyx_state[6]; __pyx_result.start_time = __pyx_state[7] + * if len(__pyx_state) > 8 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_XDEC_MEMVIEW(&__pyx_t_4, 1); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_CosmicBase__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_DensProfs(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_3__pyx_unpickle_DensProfs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6common_15profile_classes_3__pyx_unpickle_DensProfs = {"__pyx_unpickle_DensProfs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_3__pyx_unpickle_DensProfs, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6common_15profile_classes_3__pyx_unpickle_DensProfs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_DensProfs (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensProfs", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensProfs", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_DensProfs") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__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_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensProfs", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensProfs", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_2__pyx_unpickle_DensProfs(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_2__pyx_unpickle_DensProfs(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 + int __pyx_t_1; + 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("__pyx_unpickle_DensProfs", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xbdc4b1f: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xbdc4b1f = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xbdc4b1f) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0xbdc4b1f: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xbdc4b1f = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + * __pyx_result = DensProfs.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0xbdc4b1f: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xbdc4b1f = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = DensProfs.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xbd, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xbdc4b1f: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xbdc4b1f = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xbdc4b1f = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + * __pyx_result = DensProfs.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_DensProfs__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6common_15profile_classes_DensProfs), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xbdc4b1f = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + * __pyx_result = DensProfs.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_DensProfs__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = DensProfs.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_DensProfs__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_DensProfs__set_state(DensProfs __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_f_6common_15profile_classes___pyx_unpickle_DensProfs__set_state(((struct __pyx_obj_6common_15profile_classes_DensProfs *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xbdc4b1f = (CENTER, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + * __pyx_result = DensProfs.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_DensProfs__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_DensProfs__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_DensProfs__set_state(DensProfs __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.idx_cat = __pyx_state[6]; __pyx_result.masses = __pyx_state[7]; __pyx_result.r200 = __pyx_state[8]; __pyx_result.start_time = __pyx_state[9]; __pyx_result.xyz = __pyx_state[10] + */ + __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_DensProfs(__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_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensProfs", __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_DensProfs__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_DensProfs__set_state(DensProfs __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.idx_cat = __pyx_state[6]; __pyx_result.masses = __pyx_state[7]; __pyx_result.r200 = __pyx_state[8]; __pyx_result.start_time = __pyx_state[9]; __pyx_result.xyz = __pyx_state[10] + * if len(__pyx_state) > 11 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_6common_15profile_classes___pyx_unpickle_DensProfs__set_state(struct __pyx_obj_6common_15profile_classes_DensProfs *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + float __pyx_t_2; + int __pyx_t_3; + __Pyx_memviewslice __pyx_t_4 = { 0, 0, { 0 }, { 0 }, { 0 } }; + double __pyx_t_5; + __Pyx_memviewslice __pyx_t_6 = { 0, 0, { 0 }, { 0 }, { 0 } }; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_DensProfs__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_DensProfs__set_state(DensProfs __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.idx_cat = __pyx_state[6]; __pyx_result.masses = __pyx_state[7]; __pyx_result.r200 = __pyx_state[8]; __pyx_result.start_time = __pyx_state[9]; __pyx_result.xyz = __pyx_state[10] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 11 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[11]) + */ + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->__pyx_base.CENTER); + __Pyx_DECREF(__pyx_v___pyx_result->__pyx_base.CENTER); + __pyx_v___pyx_result->__pyx_base.CENTER = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.L_BOX = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.MASS_UNIT = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.MIN_NUMBER_PTCS = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.SAFE = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->__pyx_base.SNAP); + __Pyx_DECREF(__pyx_v___pyx_result->__pyx_base.SNAP); + __pyx_v___pyx_result->__pyx_base.SNAP = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->idx_cat); + __Pyx_DECREF(__pyx_v___pyx_result->idx_cat); + __pyx_v___pyx_result->idx_cat = __pyx_t_1; + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v___pyx_result->masses, 0); + __pyx_v___pyx_result->masses = __pyx_t_4; + __pyx_t_4.memview = NULL; + __pyx_t_4.data = NULL; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v___pyx_result->__pyx_base.r200, 0); + __pyx_v___pyx_result->__pyx_base.r200 = __pyx_t_4; + __pyx_t_4.memview = NULL; + __pyx_t_4.data = NULL; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.start_time = __pyx_t_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) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 10, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v___pyx_result->xyz, 0); + __pyx_v___pyx_result->xyz = __pyx_t_6; + __pyx_t_6.memview = NULL; + __pyx_t_6.data = NULL; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_DensProfs__set_state(DensProfs __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.idx_cat = __pyx_state[6]; __pyx_result.masses = __pyx_state[7]; __pyx_result.r200 = __pyx_state[8]; __pyx_result.start_time = __pyx_state[9]; __pyx_result.xyz = __pyx_state[10] + * if len(__pyx_state) > 11 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[11]) + */ + 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_8 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_9 = ((__pyx_t_8 > 11) != 0); + if (__pyx_t_9) { + } else { + __pyx_t_7 = __pyx_t_9; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_9 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_10 = (__pyx_t_9 != 0); + __pyx_t_7 = __pyx_t_10; + __pyx_L4_bool_binop_done:; + if (__pyx_t_7) { + + /* "(tree fragment)":14 + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.idx_cat = __pyx_state[6]; __pyx_result.masses = __pyx_state[7]; __pyx_result.r200 = __pyx_state[8]; __pyx_result.start_time = __pyx_state[9]; __pyx_result.xyz = __pyx_state[10] + * if len(__pyx_state) > 11 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[11]) # <<<<<<<<<<<<<< + */ + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_update); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 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_11 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 11, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + } + } + __pyx_t_1 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_11); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_DensProfs__set_state(DensProfs __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.idx_cat = __pyx_state[6]; __pyx_result.masses = __pyx_state[7]; __pyx_result.r200 = __pyx_state[8]; __pyx_result.start_time = __pyx_state[9]; __pyx_result.xyz = __pyx_state[10] + * if len(__pyx_state) > 11 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[11]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_DensProfs__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_DensProfs__set_state(DensProfs __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.idx_cat = __pyx_state[6]; __pyx_result.masses = __pyx_state[7]; __pyx_result.r200 = __pyx_state[8]; __pyx_result.start_time = __pyx_state[9]; __pyx_result.xyz = __pyx_state[10] + * if len(__pyx_state) > 11 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_XDEC_MEMVIEW(&__pyx_t_4, 1); + __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensProfs__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_DensShapeProfs(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_5__pyx_unpickle_DensShapeProfs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6common_15profile_classes_5__pyx_unpickle_DensShapeProfs = {"__pyx_unpickle_DensShapeProfs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_5__pyx_unpickle_DensShapeProfs, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6common_15profile_classes_5__pyx_unpickle_DensShapeProfs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_DensShapeProfs (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensShapeProfs", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensShapeProfs", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_DensShapeProfs") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__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_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensShapeProfs", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensShapeProfs", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_4__pyx_unpickle_DensShapeProfs(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_4__pyx_unpickle_DensShapeProfs(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 + int __pyx_t_1; + 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("__pyx_unpickle_DensShapeProfs", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x80bcedb: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x80bcedb = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x80bcedb) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0x80bcedb: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x80bcedb = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + * __pyx_result = DensShapeProfs.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0x80bcedb: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x80bcedb = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = DensShapeProfs.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x80, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x80bcedb: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x80bcedb = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x80bcedb = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + * __pyx_result = DensShapeProfs.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_DensShapeProfs__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6common_15profile_classes_DensShapeProfs), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x80bcedb = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + * __pyx_result = DensShapeProfs.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_DensShapeProfs__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = DensShapeProfs.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_DensShapeProfs__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_DensShapeProfs__set_state(DensShapeProfs __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_f_6common_15profile_classes___pyx_unpickle_DensShapeProfs__set_state(((struct __pyx_obj_6common_15profile_classes_DensShapeProfs *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x80bcedb = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, idx_cat, masses, r200, start_time, xyz))" % __pyx_checksum) + * __pyx_result = DensShapeProfs.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_DensShapeProfs__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_DensShapeProfs__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_DensShapeProfs__set_state(DensShapeProfs __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.L_BOX = __pyx_state[4]; __pyx_result.MASS_UNIT = __pyx_state[5]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[6]; __pyx_result.M_TOL = __pyx_state[7]; __pyx_result.N_MIN = __pyx_state[8]; __pyx_result.N_WALL = __pyx_state[9]; __pyx_result.SAFE = __pyx_state[10]; __pyx_result.SNAP = __pyx_state[11]; __pyx_result.idx_cat = __pyx_state[12]; __pyx_result.masses = __pyx_state[13]; __pyx_result.r200 = __pyx_state[14]; __pyx_result.start_time = __pyx_state[15]; __pyx_result.xyz = __pyx_state[16] + */ + __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_DensShapeProfs(__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_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensShapeProfs", __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_DensShapeProfs__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_DensShapeProfs__set_state(DensShapeProfs __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.L_BOX = __pyx_state[4]; __pyx_result.MASS_UNIT = __pyx_state[5]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[6]; __pyx_result.M_TOL = __pyx_state[7]; __pyx_result.N_MIN = __pyx_state[8]; __pyx_result.N_WALL = __pyx_state[9]; __pyx_result.SAFE = __pyx_state[10]; __pyx_result.SNAP = __pyx_state[11]; __pyx_result.idx_cat = __pyx_state[12]; __pyx_result.masses = __pyx_state[13]; __pyx_result.r200 = __pyx_state[14]; __pyx_result.start_time = __pyx_state[15]; __pyx_result.xyz = __pyx_state[16] + * if len(__pyx_state) > 17 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_6common_15profile_classes___pyx_unpickle_DensShapeProfs__set_state(struct __pyx_obj_6common_15profile_classes_DensShapeProfs *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + float __pyx_t_3; + __Pyx_memviewslice __pyx_t_4 = { 0, 0, { 0 }, { 0 }, { 0 } }; + double __pyx_t_5; + __Pyx_memviewslice __pyx_t_6 = { 0, 0, { 0 }, { 0 }, { 0 } }; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_DensShapeProfs__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_DensShapeProfs__set_state(DensShapeProfs __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.L_BOX = __pyx_state[4]; __pyx_result.MASS_UNIT = __pyx_state[5]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[6]; __pyx_result.M_TOL = __pyx_state[7]; __pyx_result.N_MIN = __pyx_state[8]; __pyx_result.N_WALL = __pyx_state[9]; __pyx_result.SAFE = __pyx_state[10]; __pyx_result.SNAP = __pyx_state[11]; __pyx_result.idx_cat = __pyx_state[12]; __pyx_result.masses = __pyx_state[13]; __pyx_result.r200 = __pyx_state[14]; __pyx_result.start_time = __pyx_state[15]; __pyx_result.xyz = __pyx_state[16] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 17 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[17]) + */ + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->__pyx_base.__pyx_base.CENTER); + __Pyx_DECREF(__pyx_v___pyx_result->__pyx_base.__pyx_base.CENTER); + __pyx_v___pyx_result->__pyx_base.__pyx_base.CENTER = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->D_BINS = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->D_LOGEND = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->D_LOGSTART = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.__pyx_base.L_BOX = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.__pyx_base.MASS_UNIT = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.__pyx_base.MIN_NUMBER_PTCS = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->M_TOL = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->N_MIN = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->N_WALL = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 10, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.__pyx_base.SAFE = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 11, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->__pyx_base.__pyx_base.SNAP); + __Pyx_DECREF(__pyx_v___pyx_result->__pyx_base.__pyx_base.SNAP); + __pyx_v___pyx_result->__pyx_base.__pyx_base.SNAP = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 12, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->__pyx_base.idx_cat); + __Pyx_DECREF(__pyx_v___pyx_result->__pyx_base.idx_cat); + __pyx_v___pyx_result->__pyx_base.idx_cat = __pyx_t_1; + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 13, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v___pyx_result->__pyx_base.masses, 0); + __pyx_v___pyx_result->__pyx_base.masses = __pyx_t_4; + __pyx_t_4.memview = NULL; + __pyx_t_4.data = NULL; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 14, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v___pyx_result->__pyx_base.__pyx_base.r200, 0); + __pyx_v___pyx_result->__pyx_base.__pyx_base.r200 = __pyx_t_4; + __pyx_t_4.memview = NULL; + __pyx_t_4.data = NULL; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 15, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.__pyx_base.start_time = __pyx_t_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) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 16, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v___pyx_result->__pyx_base.xyz, 0); + __pyx_v___pyx_result->__pyx_base.xyz = __pyx_t_6; + __pyx_t_6.memview = NULL; + __pyx_t_6.data = NULL; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_DensShapeProfs__set_state(DensShapeProfs __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.L_BOX = __pyx_state[4]; __pyx_result.MASS_UNIT = __pyx_state[5]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[6]; __pyx_result.M_TOL = __pyx_state[7]; __pyx_result.N_MIN = __pyx_state[8]; __pyx_result.N_WALL = __pyx_state[9]; __pyx_result.SAFE = __pyx_state[10]; __pyx_result.SNAP = __pyx_state[11]; __pyx_result.idx_cat = __pyx_state[12]; __pyx_result.masses = __pyx_state[13]; __pyx_result.r200 = __pyx_state[14]; __pyx_result.start_time = __pyx_state[15]; __pyx_result.xyz = __pyx_state[16] + * if len(__pyx_state) > 17 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[17]) + */ + 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_8 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_9 = ((__pyx_t_8 > 17) != 0); + if (__pyx_t_9) { + } else { + __pyx_t_7 = __pyx_t_9; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_9 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_10 = (__pyx_t_9 != 0); + __pyx_t_7 = __pyx_t_10; + __pyx_L4_bool_binop_done:; + if (__pyx_t_7) { + + /* "(tree fragment)":14 + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.L_BOX = __pyx_state[4]; __pyx_result.MASS_UNIT = __pyx_state[5]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[6]; __pyx_result.M_TOL = __pyx_state[7]; __pyx_result.N_MIN = __pyx_state[8]; __pyx_result.N_WALL = __pyx_state[9]; __pyx_result.SAFE = __pyx_state[10]; __pyx_result.SNAP = __pyx_state[11]; __pyx_result.idx_cat = __pyx_state[12]; __pyx_result.masses = __pyx_state[13]; __pyx_result.r200 = __pyx_state[14]; __pyx_result.start_time = __pyx_state[15]; __pyx_result.xyz = __pyx_state[16] + * if len(__pyx_state) > 17 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[17]) # <<<<<<<<<<<<<< + */ + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_update); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 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_11 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 17, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + } + } + __pyx_t_1 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_11); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_DensShapeProfs__set_state(DensShapeProfs __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.L_BOX = __pyx_state[4]; __pyx_result.MASS_UNIT = __pyx_state[5]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[6]; __pyx_result.M_TOL = __pyx_state[7]; __pyx_result.N_MIN = __pyx_state[8]; __pyx_result.N_WALL = __pyx_state[9]; __pyx_result.SAFE = __pyx_state[10]; __pyx_result.SNAP = __pyx_state[11]; __pyx_result.idx_cat = __pyx_state[12]; __pyx_result.masses = __pyx_state[13]; __pyx_result.r200 = __pyx_state[14]; __pyx_result.start_time = __pyx_state[15]; __pyx_result.xyz = __pyx_state[16] + * if len(__pyx_state) > 17 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[17]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_DensShapeProfs__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_DensShapeProfs__set_state(DensShapeProfs __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.L_BOX = __pyx_state[4]; __pyx_result.MASS_UNIT = __pyx_state[5]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[6]; __pyx_result.M_TOL = __pyx_state[7]; __pyx_result.N_MIN = __pyx_state[8]; __pyx_result.N_WALL = __pyx_state[9]; __pyx_result.SAFE = __pyx_state[10]; __pyx_result.SNAP = __pyx_state[11]; __pyx_result.idx_cat = __pyx_state[12]; __pyx_result.masses = __pyx_state[13]; __pyx_result.r200 = __pyx_state[14]; __pyx_result.start_time = __pyx_state[15]; __pyx_result.xyz = __pyx_state[16] + * if len(__pyx_state) > 17 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_XDEC_MEMVIEW(&__pyx_t_4, 1); + __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensShapeProfs__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_DensProfsHDF5(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_7__pyx_unpickle_DensProfsHDF5(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6common_15profile_classes_7__pyx_unpickle_DensProfsHDF5 = {"__pyx_unpickle_DensProfsHDF5", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_7__pyx_unpickle_DensProfsHDF5, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6common_15profile_classes_7__pyx_unpickle_DensProfsHDF5(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_DensProfsHDF5 (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensProfsHDF5", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensProfsHDF5", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_DensProfsHDF5") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__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_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensProfsHDF5", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensProfsHDF5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_6__pyx_unpickle_DensProfsHDF5(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_6__pyx_unpickle_DensProfsHDF5(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 + int __pyx_t_1; + 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("__pyx_unpickle_DensProfsHDF5", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xc6de7a6: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6de7a6 = (CENTER, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xc6de7a6) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0xc6de7a6: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6de7a6 = (CENTER, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + * __pyx_result = DensProfsHDF5.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0xc6de7a6: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6de7a6 = (CENTER, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = DensProfsHDF5.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xc6, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xc6de7a6: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6de7a6 = (CENTER, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6de7a6 = (CENTER, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + * __pyx_result = DensProfsHDF5.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_DensProfsHDF5__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6common_15profile_classes_DensProfsHDF5), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6de7a6 = (CENTER, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + * __pyx_result = DensProfsHDF5.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_DensProfsHDF5__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = DensProfsHDF5.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_DensProfsHDF5__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_DensProfsHDF5__set_state(DensProfsHDF5 __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_f_6common_15profile_classes___pyx_unpickle_DensProfsHDF5__set_state(((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc6de7a6 = (CENTER, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + * __pyx_result = DensProfsHDF5.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_DensProfsHDF5__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_DensProfsHDF5__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_DensProfsHDF5__set_state(DensProfsHDF5 __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[1]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[2]; __pyx_result.L_BOX = __pyx_state[3]; __pyx_result.MASS_UNIT = __pyx_state[4]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[5]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[6]; __pyx_result.SAFE = __pyx_state[7]; __pyx_result.SNAP = __pyx_state[8]; __pyx_result.SNAP_MAX = __pyx_state[9]; __pyx_result.WANT_RVIR = __pyx_state[10]; __pyx_result.r200 = __pyx_state[11]; __pyx_result.start_time = __pyx_state[12] + */ + __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_DensProfsHDF5(__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_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensProfsHDF5", __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_DensProfsHDF5__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_DensProfsHDF5__set_state(DensProfsHDF5 __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[1]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[2]; __pyx_result.L_BOX = __pyx_state[3]; __pyx_result.MASS_UNIT = __pyx_state[4]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[5]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[6]; __pyx_result.SAFE = __pyx_state[7]; __pyx_result.SNAP = __pyx_state[8]; __pyx_result.SNAP_MAX = __pyx_state[9]; __pyx_result.WANT_RVIR = __pyx_state[10]; __pyx_result.r200 = __pyx_state[11]; __pyx_result.start_time = __pyx_state[12] + * if len(__pyx_state) > 13 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_6common_15profile_classes___pyx_unpickle_DensProfsHDF5__set_state(struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + float __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + __Pyx_memviewslice __pyx_t_5 = { 0, 0, { 0 }, { 0 }, { 0 } }; + double __pyx_t_6; + Py_ssize_t __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_DensProfsHDF5__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_DensProfsHDF5__set_state(DensProfsHDF5 __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[1]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[2]; __pyx_result.L_BOX = __pyx_state[3]; __pyx_result.MASS_UNIT = __pyx_state[4]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[5]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[6]; __pyx_result.SAFE = __pyx_state[7]; __pyx_result.SNAP = __pyx_state[8]; __pyx_result.SNAP_MAX = __pyx_state[9]; __pyx_result.WANT_RVIR = __pyx_state[10]; __pyx_result.r200 = __pyx_state[11]; __pyx_result.start_time = __pyx_state[12] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 13 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[13]) + */ + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->__pyx_base.CENTER); + __Pyx_DECREF(__pyx_v___pyx_result->__pyx_base.CENTER); + __pyx_v___pyx_result->__pyx_base.CENTER = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->HDF5_GROUP_DEST); + __Pyx_DECREF(__pyx_v___pyx_result->HDF5_GROUP_DEST); + __pyx_v___pyx_result->HDF5_GROUP_DEST = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->HDF5_SNAP_DEST); + __Pyx_DECREF(__pyx_v___pyx_result->HDF5_SNAP_DEST); + __pyx_v___pyx_result->HDF5_SNAP_DEST = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.L_BOX = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.MASS_UNIT = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.MIN_NUMBER_PTCS = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->MIN_NUMBER_STAR_PTCS = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.SAFE = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->__pyx_base.SNAP); + __Pyx_DECREF(__pyx_v___pyx_result->__pyx_base.SNAP); + __pyx_v___pyx_result->__pyx_base.SNAP = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->SNAP_MAX = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 10, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->WANT_RVIR = __pyx_t_4; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 11, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v___pyx_result->__pyx_base.r200, 0); + __pyx_v___pyx_result->__pyx_base.r200 = __pyx_t_5; + __pyx_t_5.memview = NULL; + __pyx_t_5.data = NULL; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 12, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.start_time = __pyx_t_6; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_DensProfsHDF5__set_state(DensProfsHDF5 __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[1]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[2]; __pyx_result.L_BOX = __pyx_state[3]; __pyx_result.MASS_UNIT = __pyx_state[4]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[5]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[6]; __pyx_result.SAFE = __pyx_state[7]; __pyx_result.SNAP = __pyx_state[8]; __pyx_result.SNAP_MAX = __pyx_state[9]; __pyx_result.WANT_RVIR = __pyx_state[10]; __pyx_result.r200 = __pyx_state[11]; __pyx_result.start_time = __pyx_state[12] + * if len(__pyx_state) > 13 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[13]) + */ + 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_7 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_8 = ((__pyx_t_7 > 13) != 0); + if (__pyx_t_8) { + } else { + __pyx_t_4 = __pyx_t_8; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_8 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_9 = (__pyx_t_8 != 0); + __pyx_t_4 = __pyx_t_9; + __pyx_L4_bool_binop_done:; + if (__pyx_t_4) { + + /* "(tree fragment)":14 + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[1]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[2]; __pyx_result.L_BOX = __pyx_state[3]; __pyx_result.MASS_UNIT = __pyx_state[4]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[5]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[6]; __pyx_result.SAFE = __pyx_state[7]; __pyx_result.SNAP = __pyx_state[8]; __pyx_result.SNAP_MAX = __pyx_state[9]; __pyx_result.WANT_RVIR = __pyx_state[10]; __pyx_result.r200 = __pyx_state[11]; __pyx_result.start_time = __pyx_state[12] + * if len(__pyx_state) > 13 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[13]) # <<<<<<<<<<<<<< + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_update); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 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_10 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 13, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_12 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + } + } + __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_10); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_DensProfsHDF5__set_state(DensProfsHDF5 __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[1]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[2]; __pyx_result.L_BOX = __pyx_state[3]; __pyx_result.MASS_UNIT = __pyx_state[4]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[5]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[6]; __pyx_result.SAFE = __pyx_state[7]; __pyx_result.SNAP = __pyx_state[8]; __pyx_result.SNAP_MAX = __pyx_state[9]; __pyx_result.WANT_RVIR = __pyx_state[10]; __pyx_result.r200 = __pyx_state[11]; __pyx_result.start_time = __pyx_state[12] + * if len(__pyx_state) > 13 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[13]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_DensProfsHDF5__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_DensProfsHDF5__set_state(DensProfsHDF5 __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[1]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[2]; __pyx_result.L_BOX = __pyx_state[3]; __pyx_result.MASS_UNIT = __pyx_state[4]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[5]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[6]; __pyx_result.SAFE = __pyx_state[7]; __pyx_result.SNAP = __pyx_state[8]; __pyx_result.SNAP_MAX = __pyx_state[9]; __pyx_result.WANT_RVIR = __pyx_state[10]; __pyx_result.r200 = __pyx_state[11]; __pyx_result.start_time = __pyx_state[12] + * if len(__pyx_state) > 13 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_XDEC_MEMVIEW(&__pyx_t_5, 1); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensProfsHDF5__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_DensShapeProfsHDF5(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_6common_15profile_classes_9__pyx_unpickle_DensShapeProfsHDF5(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_6common_15profile_classes_9__pyx_unpickle_DensShapeProfsHDF5 = {"__pyx_unpickle_DensShapeProfsHDF5", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_9__pyx_unpickle_DensShapeProfsHDF5, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_6common_15profile_classes_9__pyx_unpickle_DensShapeProfsHDF5(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_DensShapeProfsHDF5 (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensShapeProfsHDF5", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensShapeProfsHDF5", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_DensShapeProfsHDF5") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__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_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_DensShapeProfsHDF5", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensShapeProfsHDF5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_6common_15profile_classes_8__pyx_unpickle_DensShapeProfsHDF5(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_6common_15profile_classes_8__pyx_unpickle_DensShapeProfsHDF5(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 + int __pyx_t_1; + 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("__pyx_unpickle_DensShapeProfsHDF5", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x008ea9b: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x008ea9b = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x008ea9b) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0x008ea9b: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x008ea9b = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + * __pyx_result = DensShapeProfsHDF5.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0x008ea9b: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x008ea9b = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = DensShapeProfsHDF5.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x00, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0x008ea9b: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x008ea9b = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x008ea9b = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + * __pyx_result = DensShapeProfsHDF5.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_DensShapeProfsHDF5__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6common_15profile_classes_DensShapeProfsHDF5), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x008ea9b = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + * __pyx_result = DensShapeProfsHDF5.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_DensShapeProfsHDF5__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = DensShapeProfsHDF5.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_DensShapeProfsHDF5__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_DensShapeProfsHDF5__set_state(DensShapeProfsHDF5 __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_f_6common_15profile_classes___pyx_unpickle_DensShapeProfsHDF5__set_state(((struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0x008ea9b = (CENTER, D_BINS, D_LOGEND, D_LOGSTART, HDF5_GROUP_DEST, HDF5_SNAP_DEST, L_BOX, MASS_UNIT, MIN_NUMBER_PTCS, MIN_NUMBER_STAR_PTCS, M_TOL, N_MIN, N_WALL, SAFE, SNAP, SNAP_MAX, WANT_RVIR, r200, start_time))" % __pyx_checksum) + * __pyx_result = DensShapeProfsHDF5.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_DensShapeProfsHDF5__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_DensShapeProfsHDF5__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_DensShapeProfsHDF5__set_state(DensShapeProfsHDF5 __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[4]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[5]; __pyx_result.L_BOX = __pyx_state[6]; __pyx_result.MASS_UNIT = __pyx_state[7]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[8]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[9]; __pyx_result.M_TOL = __pyx_state[10]; __pyx_result.N_MIN = __pyx_state[11]; __pyx_result.N_WALL = __pyx_state[12]; __pyx_result.SAFE = __pyx_state[13]; __pyx_result.SNAP = __pyx_state[14]; __pyx_result.SNAP_MAX = __pyx_state[15]; __pyx_result.WANT_RVIR = __pyx_state[16]; __pyx_result.r200 = __pyx_state[17]; __pyx_result.start_time = __pyx_state[18] + */ + __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_DensShapeProfsHDF5(__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_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensShapeProfsHDF5", __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_DensShapeProfsHDF5__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_DensShapeProfsHDF5__set_state(DensShapeProfsHDF5 __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[4]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[5]; __pyx_result.L_BOX = __pyx_state[6]; __pyx_result.MASS_UNIT = __pyx_state[7]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[8]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[9]; __pyx_result.M_TOL = __pyx_state[10]; __pyx_result.N_MIN = __pyx_state[11]; __pyx_result.N_WALL = __pyx_state[12]; __pyx_result.SAFE = __pyx_state[13]; __pyx_result.SNAP = __pyx_state[14]; __pyx_result.SNAP_MAX = __pyx_state[15]; __pyx_result.WANT_RVIR = __pyx_state[16]; __pyx_result.r200 = __pyx_state[17]; __pyx_result.start_time = __pyx_state[18] + * if len(__pyx_state) > 19 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_6common_15profile_classes___pyx_unpickle_DensShapeProfsHDF5__set_state(struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5 *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + float __pyx_t_3; + int __pyx_t_4; + __Pyx_memviewslice __pyx_t_5 = { 0, 0, { 0 }, { 0 }, { 0 } }; + double __pyx_t_6; + Py_ssize_t __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_DensShapeProfsHDF5__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_DensShapeProfsHDF5__set_state(DensShapeProfsHDF5 __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[4]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[5]; __pyx_result.L_BOX = __pyx_state[6]; __pyx_result.MASS_UNIT = __pyx_state[7]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[8]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[9]; __pyx_result.M_TOL = __pyx_state[10]; __pyx_result.N_MIN = __pyx_state[11]; __pyx_result.N_WALL = __pyx_state[12]; __pyx_result.SAFE = __pyx_state[13]; __pyx_result.SNAP = __pyx_state[14]; __pyx_result.SNAP_MAX = __pyx_state[15]; __pyx_result.WANT_RVIR = __pyx_state[16]; __pyx_result.r200 = __pyx_state[17]; __pyx_result.start_time = __pyx_state[18] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 19 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[19]) + */ + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->__pyx_base.__pyx_base.CENTER); + __Pyx_DECREF(__pyx_v___pyx_result->__pyx_base.__pyx_base.CENTER); + __pyx_v___pyx_result->__pyx_base.__pyx_base.CENTER = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->D_BINS = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->D_LOGEND = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->D_LOGSTART = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->__pyx_base.HDF5_GROUP_DEST); + __Pyx_DECREF(__pyx_v___pyx_result->__pyx_base.HDF5_GROUP_DEST); + __pyx_v___pyx_result->__pyx_base.HDF5_GROUP_DEST = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->__pyx_base.HDF5_SNAP_DEST); + __Pyx_DECREF(__pyx_v___pyx_result->__pyx_base.HDF5_SNAP_DEST); + __pyx_v___pyx_result->__pyx_base.HDF5_SNAP_DEST = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.__pyx_base.L_BOX = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.__pyx_base.MASS_UNIT = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.__pyx_base.MIN_NUMBER_PTCS = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.MIN_NUMBER_STAR_PTCS = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 10, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->M_TOL = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 11, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->N_MIN = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 12, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->N_WALL = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 13, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.__pyx_base.SAFE = __pyx_t_3; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 14, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->__pyx_base.__pyx_base.SNAP); + __Pyx_DECREF(__pyx_v___pyx_result->__pyx_base.__pyx_base.SNAP); + __pyx_v___pyx_result->__pyx_base.__pyx_base.SNAP = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 15, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.SNAP_MAX = __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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 16, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.WANT_RVIR = __pyx_t_4; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 17, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_XDEC_MEMVIEW(&__pyx_v___pyx_result->__pyx_base.__pyx_base.r200, 0); + __pyx_v___pyx_result->__pyx_base.__pyx_base.r200 = __pyx_t_5; + __pyx_t_5.memview = NULL; + __pyx_t_5.data = NULL; + 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_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 18, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->__pyx_base.__pyx_base.start_time = __pyx_t_6; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_DensShapeProfsHDF5__set_state(DensShapeProfsHDF5 __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[4]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[5]; __pyx_result.L_BOX = __pyx_state[6]; __pyx_result.MASS_UNIT = __pyx_state[7]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[8]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[9]; __pyx_result.M_TOL = __pyx_state[10]; __pyx_result.N_MIN = __pyx_state[11]; __pyx_result.N_WALL = __pyx_state[12]; __pyx_result.SAFE = __pyx_state[13]; __pyx_result.SNAP = __pyx_state[14]; __pyx_result.SNAP_MAX = __pyx_state[15]; __pyx_result.WANT_RVIR = __pyx_state[16]; __pyx_result.r200 = __pyx_state[17]; __pyx_result.start_time = __pyx_state[18] + * if len(__pyx_state) > 19 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[19]) + */ + 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_7 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_8 = ((__pyx_t_7 > 19) != 0); + if (__pyx_t_8) { + } else { + __pyx_t_4 = __pyx_t_8; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_8 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_9 = (__pyx_t_8 != 0); + __pyx_t_4 = __pyx_t_9; + __pyx_L4_bool_binop_done:; + if (__pyx_t_4) { + + /* "(tree fragment)":14 + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[4]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[5]; __pyx_result.L_BOX = __pyx_state[6]; __pyx_result.MASS_UNIT = __pyx_state[7]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[8]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[9]; __pyx_result.M_TOL = __pyx_state[10]; __pyx_result.N_MIN = __pyx_state[11]; __pyx_result.N_WALL = __pyx_state[12]; __pyx_result.SAFE = __pyx_state[13]; __pyx_result.SNAP = __pyx_state[14]; __pyx_result.SNAP_MAX = __pyx_state[15]; __pyx_result.WANT_RVIR = __pyx_state[16]; __pyx_result.r200 = __pyx_state[17]; __pyx_result.start_time = __pyx_state[18] + * if len(__pyx_state) > 19 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[19]) # <<<<<<<<<<<<<< + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_update); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 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_10 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 19, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_12 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + } + } + __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_10); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_DensShapeProfsHDF5__set_state(DensShapeProfsHDF5 __pyx_result, tuple __pyx_state): + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[4]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[5]; __pyx_result.L_BOX = __pyx_state[6]; __pyx_result.MASS_UNIT = __pyx_state[7]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[8]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[9]; __pyx_result.M_TOL = __pyx_state[10]; __pyx_result.N_MIN = __pyx_state[11]; __pyx_result.N_WALL = __pyx_state[12]; __pyx_result.SAFE = __pyx_state[13]; __pyx_result.SNAP = __pyx_state[14]; __pyx_result.SNAP_MAX = __pyx_state[15]; __pyx_result.WANT_RVIR = __pyx_state[16]; __pyx_result.r200 = __pyx_state[17]; __pyx_result.start_time = __pyx_state[18] + * if len(__pyx_state) > 19 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[19]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_DensShapeProfsHDF5__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_DensShapeProfsHDF5__set_state(DensShapeProfsHDF5 __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.HDF5_GROUP_DEST = __pyx_state[4]; __pyx_result.HDF5_SNAP_DEST = __pyx_state[5]; __pyx_result.L_BOX = __pyx_state[6]; __pyx_result.MASS_UNIT = __pyx_state[7]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[8]; __pyx_result.MIN_NUMBER_STAR_PTCS = __pyx_state[9]; __pyx_result.M_TOL = __pyx_state[10]; __pyx_result.N_MIN = __pyx_state[11]; __pyx_result.N_WALL = __pyx_state[12]; __pyx_result.SAFE = __pyx_state[13]; __pyx_result.SNAP = __pyx_state[14]; __pyx_result.SNAP_MAX = __pyx_state[15]; __pyx_result.WANT_RVIR = __pyx_state[16]; __pyx_result.r200 = __pyx_state[17]; __pyx_result.start_time = __pyx_state[18] + * if len(__pyx_state) > 19 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_XDEC_MEMVIEW(&__pyx_t_5, 1); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_AddTraceback("common.profile_classes.__pyx_unpickle_DensShapeProfsHDF5__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + +/* Python wrapper */ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_shape = 0; + Py_ssize_t __pyx_v_itemsize; + PyObject *__pyx_v_format = 0; + PyObject *__pyx_v_mode = 0; + int __pyx_v_allocate_buffer; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[3] = ((PyObject *)__pyx_n_s_c); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(1, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(1, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 122, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_shape = ((PyObject*)values[0]); + __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 122, __pyx_L3_error) + __pyx_v_format = values[2]; + __pyx_v_mode = values[3]; + if (values[4]) { + __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 123, __pyx_L3_error) + } else { + + /* "View.MemoryView":123 + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, + * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< + * + * cdef int idx + */ + __pyx_v_allocate_buffer = ((int)1); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 122, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(1, 122, __pyx_L1_error) + if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { + PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(1, 122, __pyx_L1_error) + } + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + int __pyx_v_idx; + Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_dim; + PyObject **__pyx_v_p; + char __pyx_v_order; + int __pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + char *__pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + Py_ssize_t __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + __Pyx_INCREF(__pyx_v_format); + + /* "View.MemoryView":129 + * cdef PyObject **p + * + * self.ndim = len(shape) # <<<<<<<<<<<<<< + * self.itemsize = itemsize + * + */ + if (unlikely(__pyx_v_shape == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 129, __pyx_L1_error) + } + __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(1, 129, __pyx_L1_error) + __pyx_v_self->ndim = ((int)__pyx_t_1); + + /* "View.MemoryView":130 + * + * self.ndim = len(shape) + * self.itemsize = itemsize # <<<<<<<<<<<<<< + * + * if not self.ndim: + */ + __pyx_v_self->itemsize = __pyx_v_itemsize; + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 133, __pyx_L1_error) + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + } + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 136, __pyx_L1_error) + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + } + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + __pyx_t_2 = PyBytes_Check(__pyx_v_format); + __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":139 + * + * if not isinstance(format, bytes): + * format = format.encode('ASCII') # <<<<<<<<<<<<<< + * self._format = format # keep a reference to the byte string + * self.format = self._format + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + if (CYTHON_UNPACK_METHODS && likely(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_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + } + + /* "View.MemoryView":140 + * if not isinstance(format, bytes): + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< + * self.format = self._format + * + */ + if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(1, 140, __pyx_L1_error) + __pyx_t_3 = __pyx_v_format; + __Pyx_INCREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_v_self->_format); + __Pyx_DECREF(__pyx_v_self->_format); + __pyx_v_self->_format = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":141 + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + * self.format = self._format # <<<<<<<<<<<<<< + * + * + */ + if (unlikely(__pyx_v_self->_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); + __PYX_ERR(1, 141, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(1, 141, __pyx_L1_error) + __pyx_v_self->format = __pyx_t_7; + + /* "View.MemoryView":144 + * + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< + * self._strides = self._shape + self.ndim + * + */ + __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); + + /* "View.MemoryView":145 + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) + * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< + * + * if not self._shape: + */ + __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 148, __pyx_L1_error) + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + } + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + __pyx_t_8 = 0; + __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; + for (;;) { + if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(1, 151, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 151, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_9; + __pyx_v_idx = __pyx_t_8; + __pyx_t_8 = (__pyx_t_8 + 1); + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + __pyx_t_4 = ((__pyx_v_dim <= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":153 + * for idx, dim in enumerate(shape): + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) # <<<<<<<<<<<<<< + * self._shape[idx] = dim + * + */ + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6); + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 153, __pyx_L1_error) + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + } + + /* "View.MemoryView":154 + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim # <<<<<<<<<<<<<< + * + * cdef char order + */ + (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 157, __pyx_L1_error) + if (__pyx_t_4) { + + /* "View.MemoryView":158 + * cdef char order + * if mode == 'fortran': + * order = b'F' # <<<<<<<<<<<<<< + * self.mode = u'fortran' + * elif mode == 'c': + */ + __pyx_v_order = 'F'; + + /* "View.MemoryView":159 + * if mode == 'fortran': + * order = b'F' + * self.mode = u'fortran' # <<<<<<<<<<<<<< + * elif mode == 'c': + * order = b'C' + */ + __Pyx_INCREF(__pyx_n_u_fortran); + __Pyx_GIVEREF(__pyx_n_u_fortran); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_fortran; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 160, __pyx_L1_error) + if (likely(__pyx_t_4)) { + + /* "View.MemoryView":161 + * self.mode = u'fortran' + * elif mode == 'c': + * order = b'C' # <<<<<<<<<<<<<< + * self.mode = u'c' + * else: + */ + __pyx_v_order = 'C'; + + /* "View.MemoryView":162 + * elif mode == 'c': + * order = b'C' + * self.mode = u'c' # <<<<<<<<<<<<<< + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + */ + __Pyx_INCREF(__pyx_n_u_c); + __Pyx_GIVEREF(__pyx_n_u_c); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_c; + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":164 + * self.mode = u'c' + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) # <<<<<<<<<<<<<< + * + * self.len = fill_contig_strides_array(self._shape, self._strides, + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 164, __pyx_L1_error) + } + __pyx_L10:; + + /* "View.MemoryView":166 + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + * + * self.len = fill_contig_strides_array(self._shape, self._strides, # <<<<<<<<<<<<<< + * itemsize, self.ndim, order) + * + */ + __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); + + /* "View.MemoryView":169 + * itemsize, self.ndim, order) + * + * self.free_data = allocate_buffer # <<<<<<<<<<<<<< + * self.dtype_is_object = format == b'O' + * if allocate_buffer: + */ + __pyx_v_self->free_data = __pyx_v_allocate_buffer; + + /* "View.MemoryView":170 + * + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< + * if allocate_buffer: + * + */ + __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 170, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 170, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_v_self->dtype_is_object = __pyx_t_4; + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_4 = (__pyx_v_allocate_buffer != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":174 + * + * + * self.data = malloc(self.len) # <<<<<<<<<<<<<< + * if not self.data: + * raise MemoryError("unable to allocate array data.") + */ + __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 176, __pyx_L1_error) + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":179 + * + * if self.dtype_is_object: + * p = self.data # <<<<<<<<<<<<<< + * for i in range(self.len / itemsize): + * p[i] = Py_None + */ + __pyx_v_p = ((PyObject **)__pyx_v_self->data); + + /* "View.MemoryView":180 + * if self.dtype_is_object: + * p = self.data + * for i in range(self.len / itemsize): # <<<<<<<<<<<<<< + * p[i] = Py_None + * Py_INCREF(Py_None) + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 180, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 180, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize); + __pyx_t_9 = __pyx_t_1; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "View.MemoryView":181 + * p = self.data + * for i in range(self.len / itemsize): + * p[i] = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + (__pyx_v_p[__pyx_v_i]) = Py_None; + + /* "View.MemoryView":182 + * for i in range(self.len / itemsize): + * p[i] = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + Py_INCREF(Py_None); + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + } + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_format); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __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)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + int __pyx_v_bufmode; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + char *__pyx_t_4; + Py_ssize_t __pyx_t_5; + int __pyx_t_6; + Py_ssize_t *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":186 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 # <<<<<<<<<<<<<< + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = -1; + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 187, __pyx_L1_error) + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":188 + * cdef int bufmode = -1 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + goto __pyx_L3; + } + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 189, __pyx_L1_error) + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":190 + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + */ + __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + } + __pyx_L3:; + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 192, __pyx_L1_error) + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + } + + /* "View.MemoryView":193 + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data # <<<<<<<<<<<<<< + * info.len = self.len + * info.ndim = self.ndim + */ + __pyx_t_4 = __pyx_v_self->data; + __pyx_v_info->buf = __pyx_t_4; + + /* "View.MemoryView":194 + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + * info.len = self.len # <<<<<<<<<<<<<< + * info.ndim = self.ndim + * info.shape = self._shape + */ + __pyx_t_5 = __pyx_v_self->len; + __pyx_v_info->len = __pyx_t_5; + + /* "View.MemoryView":195 + * info.buf = self.data + * info.len = self.len + * info.ndim = self.ndim # <<<<<<<<<<<<<< + * info.shape = self._shape + * info.strides = self._strides + */ + __pyx_t_6 = __pyx_v_self->ndim; + __pyx_v_info->ndim = __pyx_t_6; + + /* "View.MemoryView":196 + * info.len = self.len + * info.ndim = self.ndim + * info.shape = self._shape # <<<<<<<<<<<<<< + * info.strides = self._strides + * info.suboffsets = NULL + */ + __pyx_t_7 = __pyx_v_self->_shape; + __pyx_v_info->shape = __pyx_t_7; + + /* "View.MemoryView":197 + * info.ndim = self.ndim + * info.shape = self._shape + * info.strides = self._strides # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = self.itemsize + */ + __pyx_t_7 = __pyx_v_self->_strides; + __pyx_v_info->strides = __pyx_t_7; + + /* "View.MemoryView":198 + * info.shape = self._shape + * info.strides = self._strides + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = self.itemsize + * info.readonly = 0 + */ + __pyx_v_info->suboffsets = NULL; + + /* "View.MemoryView":199 + * info.strides = self._strides + * info.suboffsets = NULL + * info.itemsize = self.itemsize # <<<<<<<<<<<<<< + * info.readonly = 0 + * + */ + __pyx_t_5 = __pyx_v_self->itemsize; + __pyx_v_info->itemsize = __pyx_t_5; + + /* "View.MemoryView":200 + * info.suboffsets = NULL + * info.itemsize = self.itemsize + * info.readonly = 0 # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + __pyx_v_info->readonly = 0; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":203 + * + * if flags & PyBUF_FORMAT: + * info.format = self.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_4 = __pyx_v_self->format; + __pyx_v_info->format = __pyx_t_4; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":205 + * info.format = self.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.obj = self + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L5:; + + /* "View.MemoryView":207 + * info.format = NULL + * + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + +/* Python wrapper */ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":213 + * def __dealloc__(array self): + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) # <<<<<<<<<<<<<< + * elif self.free_data: + * if self.dtype_is_object: + */ + __pyx_v_self->callback_free_data(__pyx_v_self->data); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + __pyx_t_1 = (__pyx_v_self->free_data != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":216 + * elif self.free_data: + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, # <<<<<<<<<<<<<< + * self._strides, self.ndim, False) + * free(self.data) + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + } + + /* "View.MemoryView":218 + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + * free(self.data) # <<<<<<<<<<<<<< + * PyObject_Free(self._shape) + * + */ + free(__pyx_v_self->data); + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + } + __pyx_L3:; + + /* "View.MemoryView":219 + * self._strides, self.ndim, False) + * free(self.data) + * PyObject_Free(self._shape) # <<<<<<<<<<<<<< + * + * @property + */ + PyObject_Free(__pyx_v_self->_shape); + + /* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__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("__get__", 0); + + /* "View.MemoryView":223 + * @property + * def memview(self): + * return self.get_memview() # <<<<<<<<<<<<<< + * + * @cname('get_memview') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) { + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_memview", 0); + + /* "View.MemoryView":227 + * @cname('get_memview') + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< + * return memoryview(self, flags, self.dtype_is_object) + * + */ + __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); + + /* "View.MemoryView":228 + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":231 + * + * def __len__(self): + * return self._shape[0] # <<<<<<<<<<<<<< + * + * def __getattr__(self, attr): + */ + __pyx_r = (__pyx_v_self->_shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getattr__", 0); + + /* "View.MemoryView":234 + * + * def __getattr__(self, attr): + * return getattr(self.memview, attr) # <<<<<<<<<<<<<< + * + * def __getitem__(self, item): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":237 + * + * def __getitem__(self, item): + * return self.memview[item] # <<<<<<<<<<<<<< + * + * def __setitem__(self, item, value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + +/* Python wrapper */ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + + /* "View.MemoryView":240 + * + * def __setitem__(self, item, value): + * self.memview[item] = value # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(1, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + +static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) { + struct __pyx_array_obj *__pyx_v_result = 0; + struct __pyx_array_obj *__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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("array_cwrapper", 0); + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":249 + * + * if buf == NULL: + * result = array(shape, itemsize, format, mode.decode('ASCII')) # <<<<<<<<<<<<<< + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4); + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + /*else*/ { + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":252 + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) # <<<<<<<<<<<<<< + * result.data = buf + * + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(1, 252, __pyx_L1_error) + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __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_v_result = ((struct __pyx_array_obj *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "View.MemoryView":253 + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) + * result.data = buf # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->data = __pyx_v_buf; + } + __pyx_L3:; + + /* "View.MemoryView":255 + * result.data = buf + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + + /* 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("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + +/* Python wrapper */ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_name = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0}; + PyObject* values[1] = {0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(1, 281, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + } + __pyx_v_name = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 281, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 0); + + /* "View.MemoryView":282 + * cdef object name + * def __init__(self, name): + * self.name = name # <<<<<<<<<<<<<< + * def __repr__(self): + * return self.name + */ + __Pyx_INCREF(__pyx_v_name); + __Pyx_GIVEREF(__pyx_v_name); + __Pyx_GOTREF(__pyx_v_self->name); + __Pyx_DECREF(__pyx_v_self->name); + __pyx_v_self->name = __pyx_v_name; + + /* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + +/* Python wrapper */ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":284 + * self.name = name + * def __repr__(self): + * return self.name # <<<<<<<<<<<<<< + * + * cdef generic = Enum("") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->name); + __pyx_r = __pyx_v_self->name; + goto __pyx_L0; + + /* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + + /* function exit code */ + __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___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__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; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.name,) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_self->name); + __Pyx_GIVEREF(__pyx_v_self->name); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); + __pyx_v_state = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":7 + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_2 = (__pyx_v__dict != Py_None); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); + __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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.name is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.name,) + * _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.name is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_self->name != Py_None); + __pyx_v_use_setstate = __pyx_t_3; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + __pyx_t_3 = (__pyx_v_use_setstate != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":13 + * use_setstate = self.name is not None + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __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_5); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __pyx_t_5 = 0; + __pyx_t_1 = 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_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.Enum.__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_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__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__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_unpickle_Enum__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_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__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("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + +static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) { + Py_intptr_t __pyx_v_aligned_p; + size_t __pyx_v_offset; + void *__pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":300 + * cdef void *align_pointer(void *memory, size_t alignment) nogil: + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory # <<<<<<<<<<<<<< + * cdef size_t offset + * + */ + __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory); + + /* "View.MemoryView":304 + * + * with cython.cdivision(True): + * offset = aligned_p % alignment # <<<<<<<<<<<<<< + * + * if offset > 0: + */ + __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + __pyx_t_1 = ((__pyx_v_offset > 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":307 + * + * if offset > 0: + * aligned_p += alignment - offset # <<<<<<<<<<<<<< + * + * return aligned_p + */ + __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset)); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + } + + /* "View.MemoryView":309 + * aligned_p += alignment - offset + * + * return aligned_p # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((void *)__pyx_v_aligned_p); + goto __pyx_L0; + + /* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + +/* Python wrapper */ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_obj = 0; + int __pyx_v_flags; + int __pyx_v_dtype_is_object; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(1, 345, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 345, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj = values[0]; + __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error) + if (values[2]) { + __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error) + } else { + __pyx_v_dtype_is_object = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 345, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + + /* "View.MemoryView":346 + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj # <<<<<<<<<<<<<< + * self.flags = flags + * if type(self) is memoryview or obj is not None: + */ + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + __Pyx_GOTREF(__pyx_v_self->obj); + __Pyx_DECREF(__pyx_v_self->obj); + __pyx_v_self->obj = __pyx_v_obj; + + /* "View.MemoryView":347 + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj + * self.flags = flags # <<<<<<<<<<<<<< + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + */ + __pyx_v_self->flags = __pyx_v_flags; + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type)); + __pyx_t_3 = (__pyx_t_2 != 0); + if (!__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_obj != Py_None); + __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { + + /* "View.MemoryView":349 + * self.flags = flags + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + */ + __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 349, __pyx_L1_error) + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":351 + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; + + /* "View.MemoryView":352 + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * global __pyx_memoryview_thread_locks_used + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + } + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + } + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":356 + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + */ + __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + + /* "View.MemoryView":357 + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<< + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1); + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":359 + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< + * if self.lock is NULL: + * raise MemoryError + */ + __pyx_v_self->lock = PyThread_allocate_lock(); + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":361 + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + PyErr_NoMemory(); __PYX_ERR(1, 361, __pyx_L1_error) + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + } + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":364 + * + * if flags & PyBUF_FORMAT: + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<< + * else: + * self.dtype_is_object = dtype_is_object + */ + __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_self->dtype_is_object = __pyx_t_1; + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + goto __pyx_L10; + } + + /* "View.MemoryView":366 + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + */ + /*else*/ { + __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; + } + __pyx_L10:; + + /* "View.MemoryView":368 + * self.dtype_is_object = dtype_is_object + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( # <<<<<<<<<<<<<< + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL + */ + __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int)))); + + /* "View.MemoryView":370 + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL # <<<<<<<<<<<<<< + * + * def __dealloc__(memoryview self): + */ + __pyx_v_self->typeinfo = NULL; + + /* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + +/* Python wrapper */ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { + int __pyx_v_i; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyThread_type_lock __pyx_t_6; + PyThread_type_lock __pyx_t_7; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + __pyx_t_1 = (__pyx_v_self->obj != Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":374 + * def __dealloc__(memoryview self): + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + */ + __Pyx_ReleaseBuffer((&__pyx_v_self->view)); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + __pyx_t_2 = ((((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":377 + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<< + * Py_DECREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL; + + /* "View.MemoryView":378 + * + * (<__pyx_buffer *> &self.view).obj = NULL + * Py_DECREF(Py_None) # <<<<<<<<<<<<<< + * + * cdef int i + */ + Py_DECREF(Py_None); + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + } + __pyx_L3:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":383 + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<< + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + */ + __pyx_t_3 = __pyx_memoryview_thread_locks_used; + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":385 + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<< + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1); + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":388 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<< + * break + * else: + */ + __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]); + + /* "View.MemoryView":387 + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break + */ + (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6; + (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7; + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + } + + /* "View.MemoryView":389 + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break # <<<<<<<<<<<<<< + * else: + * PyThread_free_lock(self.lock) + */ + goto __pyx_L6_break; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + } + } + /*else*/ { + + /* "View.MemoryView":391 + * break + * else: + * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + */ + PyThread_free_lock(__pyx_v_self->lock); + } + __pyx_L6_break:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + } + + /* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + Py_ssize_t __pyx_v_dim; + char *__pyx_v_itemp; + PyObject *__pyx_v_idx = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + PyObject *(*__pyx_t_4)(PyObject *); + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + char *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_item_pointer", 0); + + /* "View.MemoryView":395 + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< + * + * for dim, idx in enumerate(index): + */ + __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) { + __pyx_t_2 = __pyx_v_index; __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_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 397, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_4)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) 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(1, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) 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(1, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 397, __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(1, 397, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_1; + __pyx_t_1 = (__pyx_t_1 + 1); + + /* "View.MemoryView":398 + * + * for dim, idx in enumerate(index): + * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< + * + * return itemp + */ + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 398, __pyx_L1_error) + __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(1, 398, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_7; + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":400 + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + * return itemp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_itemp; + goto __pyx_L0; + + /* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_indices = NULL; + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + char *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":405 + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: + * return self # <<<<<<<<<<<<<< + * + * have_slices, indices = _unellipsify(index, self.view.ndim) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __pyx_r = ((PyObject *)__pyx_v_self); + goto __pyx_L0; + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + } + + /* "View.MemoryView":407 + * return self + * + * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * cdef char *itemp + */ + __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (likely(__pyx_t_3 != Py_None)) { + PyObject* sequence = __pyx_t_3; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 407, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 407, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_v_indices = __pyx_t_5; + __pyx_t_5 = 0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 410, __pyx_L1_error) + if (__pyx_t_2) { + + /* "View.MemoryView":411 + * cdef char *itemp + * if have_slices: + * return memview_slice(self, indices) # <<<<<<<<<<<<<< + * else: + * itemp = self.get_item_pointer(indices) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + } + + /* "View.MemoryView":413 + * return memview_slice(self, indices) + * else: + * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< + * return self.convert_item_to_object(itemp) + * + */ + /*else*/ { + __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(1, 413, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_6; + + /* "View.MemoryView":414 + * else: + * itemp = self.get_item_pointer(indices) + * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< + * + * def __setitem__(memoryview self, object index, object value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + +/* Python wrapper */ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_obj = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + __Pyx_INCREF(__pyx_v_index); + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + __pyx_t_1 = (__pyx_v_self->view.readonly != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 418, __pyx_L1_error) + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + } + + /* "View.MemoryView":420 + * raise TypeError("Cannot assign to read-only memoryview") + * + * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * if have_slices: + */ + __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (likely(__pyx_t_2 != Py_None)) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 420, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 420, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_3; + __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 422, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":423 + * + * if have_slices: + * obj = self.is_slice(value) # <<<<<<<<<<<<<< + * if obj: + * self.setitem_slice_assignment(self[index], obj) + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_obj = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 424, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":425 + * obj = self.is_slice(value) + * if obj: + * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< + * else: + * self.setitem_slice_assign_scalar(self[index], value) + */ + __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":427 + * self.setitem_slice_assignment(self[index], obj) + * else: + * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< + * else: + * self.setitem_indexed(index, value) + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(1, 427, __pyx_L1_error) + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L5:; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":429 + * self.setitem_slice_assign_scalar(self[index], value) + * else: + * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< + * + * cdef is_slice(self, obj): + */ + /*else*/ { + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L4:; + + /* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_slice", 0); + __Pyx_INCREF(__pyx_v_obj); + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + /*try:*/ { + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":435 + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) # <<<<<<<<<<<<<< + * except TypeError: + * return None + */ + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 435, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __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; + + /* "View.MemoryView":436 + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + * except TypeError: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); + if (__pyx_t_9) { + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(1, 436, __pyx_L6_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":437 + * self.dtype_is_object) + * except TypeError: + * return None # <<<<<<<<<<<<<< + * + * return obj + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_except_return; + } + goto __pyx_L6_except_error; + __pyx_L6_except_error:; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L1_error; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L0; + __pyx_L9_try_end:; + } + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + } + + /* "View.MemoryView":439 + * return None + * + * return obj # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assignment(self, dst, src): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_obj); + __pyx_r = __pyx_v_obj; + goto __pyx_L0; + + /* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { + __Pyx_memviewslice __pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_src_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + __Pyx_memviewslice *__pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 445, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 445, __pyx_L1_error) + + /* "View.MemoryView":446 + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], # <<<<<<<<<<<<<< + * src.ndim, dst.ndim, self.dtype_is_object) + * + */ + if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 446, __pyx_L1_error) + __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 446, __pyx_L1_error) + + /* "View.MemoryView":447 + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error) + + /* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { + int __pyx_v_array[0x80]; + void *__pyx_v_tmp; + void *__pyx_v_item; + __Pyx_memviewslice *__pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_tmp_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + char const *__pyx_t_6; + PyObject *__pyx_t_7 = NULL; + 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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); + + /* "View.MemoryView":451 + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + * cdef int array[128] + * cdef void *tmp = NULL # <<<<<<<<<<<<<< + * cdef void *item + * + */ + __pyx_v_tmp = NULL; + + /* "View.MemoryView":456 + * cdef __Pyx_memviewslice *dst_slice + * cdef __Pyx_memviewslice tmp_slice + * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< + * + * if self.view.itemsize > sizeof(array): + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 456, __pyx_L1_error) + __pyx_v_dst_slice = __pyx_t_1; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":459 + * + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< + * if tmp == NULL: + * raise MemoryError + */ + __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":461 + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * item = tmp + * else: + */ + PyErr_NoMemory(); __PYX_ERR(1, 461, __pyx_L1_error) + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + } + + /* "View.MemoryView":462 + * if tmp == NULL: + * raise MemoryError + * item = tmp # <<<<<<<<<<<<<< + * else: + * item = array + */ + __pyx_v_item = __pyx_v_tmp; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":464 + * item = tmp + * else: + * item = array # <<<<<<<<<<<<<< + * + * try: + */ + /*else*/ { + __pyx_v_item = ((void *)__pyx_v_array); + } + __pyx_L3:; + + /* "View.MemoryView":466 + * item = array + * + * try: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * ( item)[0] = value + */ + /*try:*/ { + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":468 + * try: + * if self.dtype_is_object: + * ( item)[0] = value # <<<<<<<<<<<<<< + * else: + * self.assign_item_from_object( item, value) + */ + (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":470 + * ( item)[0] = value + * else: + * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 470, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L8:; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":475 + * + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + * item, self.dtype_is_object) + */ + __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 475, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + } + + /* "View.MemoryView":476 + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< + * item, self.dtype_is_object) + * finally: + */ + __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); + } + + /* "View.MemoryView":479 + * item, self.dtype_is_object) + * finally: + * PyMem_Free(tmp) # <<<<<<<<<<<<<< + * + * cdef setitem_indexed(self, index, value): + */ + /*finally:*/ { + /*normal exit:*/{ + PyMem_Free(__pyx_v_tmp); + goto __pyx_L7; + } + __pyx_L6_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __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_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename; + { + PyMem_Free(__pyx_v_tmp); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + } + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6; + goto __pyx_L1_error; + } + __pyx_L7:; + } + + /* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_indexed", 0); + + /* "View.MemoryView":482 + * + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< + * self.assign_item_from_object(itemp, value) + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(1, 482, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_1; + + /* "View.MemoryView":483 + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_v_struct = NULL; + PyObject *__pyx_v_bytesitem = 0; + PyObject *__pyx_v_result = NULL; + 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; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + size_t __pyx_t_10; + int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":488 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef bytes bytesitem + * + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":491 + * cdef bytes bytesitem + * + * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< + * try: + * result = struct.unpack(self.view.format, bytesitem) + */ + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "View.MemoryView":493 + * bytesitem = itemp[:self.view.itemsize] + * try: + * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< + * except struct.error: + * raise ValueError("Unable to convert item to object") + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && 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; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + { + __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + if (__pyx_t_7) { + __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; + } + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6); + __Pyx_INCREF(__pyx_v_bytesitem); + __Pyx_GIVEREF(__pyx_v_bytesitem); + PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem); + __pyx_t_6 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + } + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + /*else:*/ { + __pyx_t_10 = strlen(__pyx_v_self->view.format); + __pyx_t_11 = ((__pyx_t_10 == 1) != 0); + if (__pyx_t_11) { + + /* "View.MemoryView":498 + * else: + * if len(self.view.format) == 1: + * return result[0] # <<<<<<<<<<<<<< + * return result + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 498, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6_except_return; + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + } + + /* "View.MemoryView":499 + * if len(self.view.format) == 1: + * return result[0] + * return result # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "View.MemoryView":494 + * try: + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: # <<<<<<<<<<<<<< + * raise ValueError("Unable to convert item to object") + * else: + */ + __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9); + __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0; + if (__pyx_t_8) { + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_1); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 495, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(1, 495, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesitem); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_v_struct = NULL; + char __pyx_v_c; + PyObject *__pyx_v_bytesvalue = 0; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + char *__pyx_t_11; + char *__pyx_t_12; + char *__pyx_t_13; + char *__pyx_t_14; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":504 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef char c + * cdef bytes bytesvalue + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + __pyx_t_2 = PyTuple_Check(__pyx_v_value); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "View.MemoryView":510 + * + * if isinstance(value, tuple): + * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< + * else: + * bytesvalue = struct.pack(self.view.format, value) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 510, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":512 + * bytesvalue = struct.pack(self.view.format, *value) + * else: + * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< + * + * for i, c in enumerate(bytesvalue): + */ + /*else*/ { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + { + __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (__pyx_t_5) { + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL; + } + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1); + __Pyx_INCREF(__pyx_v_value); + __Pyx_GIVEREF(__pyx_v_value); + PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value); + __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 512, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = 0; + if (unlikely(__pyx_v_bytesvalue == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); + __PYX_ERR(1, 514, __pyx_L1_error) + } + __Pyx_INCREF(__pyx_v_bytesvalue); + __pyx_t_10 = __pyx_v_bytesvalue; + __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10); + __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10)); + for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) { + __pyx_t_11 = __pyx_t_14; + __pyx_v_c = (__pyx_t_11[0]); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + __pyx_v_i = __pyx_t_9; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = (__pyx_t_9 + 1); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; + } + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* 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_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesvalue); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + char *__pyx_t_5; + void *__pyx_t_6; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->view.readonly != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 520, __pyx_L1_error) + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + } + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":523 + * + * if flags & PyBUF_ND: + * info.shape = self.view.shape # <<<<<<<<<<<<<< + * else: + * info.shape = NULL + */ + __pyx_t_4 = __pyx_v_self->view.shape; + __pyx_v_info->shape = __pyx_t_4; + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":525 + * info.shape = self.view.shape + * else: + * info.shape = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_STRIDES: + */ + /*else*/ { + __pyx_v_info->shape = NULL; + } + __pyx_L6:; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":528 + * + * if flags & PyBUF_STRIDES: + * info.strides = self.view.strides # <<<<<<<<<<<<<< + * else: + * info.strides = NULL + */ + __pyx_t_4 = __pyx_v_self->view.strides; + __pyx_v_info->strides = __pyx_t_4; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + goto __pyx_L7; + } + + /* "View.MemoryView":530 + * info.strides = self.view.strides + * else: + * info.strides = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_INDIRECT: + */ + /*else*/ { + __pyx_v_info->strides = NULL; + } + __pyx_L7:; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":533 + * + * if flags & PyBUF_INDIRECT: + * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< + * else: + * info.suboffsets = NULL + */ + __pyx_t_4 = __pyx_v_self->view.suboffsets; + __pyx_v_info->suboffsets = __pyx_t_4; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":535 + * info.suboffsets = self.view.suboffsets + * else: + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + /*else*/ { + __pyx_v_info->suboffsets = NULL; + } + __pyx_L8:; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":538 + * + * if flags & PyBUF_FORMAT: + * info.format = self.view.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_5 = __pyx_v_self->view.format; + __pyx_v_info->format = __pyx_t_5; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":540 + * info.format = self.view.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.buf = self.view.buf + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L9:; + + /* "View.MemoryView":542 + * info.format = NULL + * + * info.buf = self.view.buf # <<<<<<<<<<<<<< + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + */ + __pyx_t_6 = __pyx_v_self->view.buf; + __pyx_v_info->buf = __pyx_t_6; + + /* "View.MemoryView":543 + * + * info.buf = self.view.buf + * info.ndim = self.view.ndim # <<<<<<<<<<<<<< + * info.itemsize = self.view.itemsize + * info.len = self.view.len + */ + __pyx_t_7 = __pyx_v_self->view.ndim; + __pyx_v_info->ndim = __pyx_t_7; + + /* "View.MemoryView":544 + * info.buf = self.view.buf + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< + * info.len = self.view.len + * info.readonly = self.view.readonly + */ + __pyx_t_8 = __pyx_v_self->view.itemsize; + __pyx_v_info->itemsize = __pyx_t_8; + + /* "View.MemoryView":545 + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + * info.len = self.view.len # <<<<<<<<<<<<<< + * info.readonly = self.view.readonly + * info.obj = self + */ + __pyx_t_8 = __pyx_v_self->view.len; + __pyx_v_info->len = __pyx_t_8; + + /* "View.MemoryView":546 + * info.itemsize = self.view.itemsize + * info.len = self.view.len + * info.readonly = self.view.readonly # <<<<<<<<<<<<<< + * info.obj = self + * + */ + __pyx_t_1 = __pyx_v_self->view.readonly; + __pyx_v_info->readonly = __pyx_t_1; + + /* "View.MemoryView":547 + * info.len = self.view.len + * info.readonly = self.view.readonly + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":554 + * @property + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< + * transpose_memslice(&result.from_slice) + * return result + */ + __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(1, 554, __pyx_L1_error) + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":555 + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 555, __pyx_L1_error) + + /* "View.MemoryView":556 + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + * return result # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":560 + * @property + * def base(self): + * return self.obj # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->obj); + __pyx_r = __pyx_v_self->obj; + goto __pyx_L0; + + /* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_length; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":564 + * @property + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_length = (__pyx_t_2[0]); + __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_stride; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 570, __pyx_L1_error) + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + } + + /* "View.MemoryView":572 + * raise ValueError("Buffer view does not expose strides") + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_v_stride = (__pyx_t_3[0]); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + Py_ssize_t *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__13, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + } + + /* "View.MemoryView":579 + * return (-1,) * self.view.ndim + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim); + for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) { + __pyx_t_4 = __pyx_t_6; + __pyx_v_suboffset = (__pyx_t_4[0]); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__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("__get__", 0); + + /* "View.MemoryView":583 + * @property + * def ndim(self): + * return self.view.ndim # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 583, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__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("__get__", 0); + + /* "View.MemoryView":587 + * @property + * def itemsize(self): + * return self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 587, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":591 + * @property + * def nbytes(self): + * return self.size * self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + __pyx_t_1 = (__pyx_v_self->_size == Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":596 + * def size(self): + * if self._size is None: + * result = 1 # <<<<<<<<<<<<<< + * + * for length in self.view.shape[:self.view.ndim]: + */ + __Pyx_INCREF(__pyx_int_1); + __pyx_v_result = __pyx_int_1; + + /* "View.MemoryView":598 + * result = 1 + * + * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<< + * result *= length + * + */ + __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 598, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6); + __pyx_t_6 = 0; + + /* "View.MemoryView":599 + * + * for length in self.view.shape[:self.view.ndim]: + * result *= length # <<<<<<<<<<<<<< + * + * self._size = result + */ + __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6); + __pyx_t_6 = 0; + } + + /* "View.MemoryView":601 + * result *= length + * + * self._size = result # <<<<<<<<<<<<<< + * + * return self._size + */ + __Pyx_INCREF(__pyx_v_result); + __Pyx_GIVEREF(__pyx_v_result); + __Pyx_GOTREF(__pyx_v_self->_size); + __Pyx_DECREF(__pyx_v_self->_size); + __pyx_v_self->_size = __pyx_v_result; + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + } + + /* "View.MemoryView":603 + * self._size = result + * + * return self._size # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->_size); + __pyx_r = __pyx_v_self->_size; + goto __pyx_L0; + + /* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":607 + * def __len__(self): + * if self.view.ndim >= 1: + * return self.view.shape[0] # <<<<<<<<<<<<<< + * + * return 0 + */ + __pyx_r = (__pyx_v_self->view.shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + } + + /* "View.MemoryView":609 + * return self.view.shape[0] + * + * return 0 # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":613 + * def __repr__(self): + * return "" % (self.base.__class__.__name__, + * id(self)) # <<<<<<<<<<<<<< + * + * def __str__(self): + */ + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 613, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__str__", 0); + + /* "View.MemoryView":616 + * + * def __str__(self): + * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __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; + + /* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_c_contig", 0); + + /* "View.MemoryView":622 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 622, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":623 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<< + * + * def is_f_contig(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_f_contig", 0); + + /* "View.MemoryView":628 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 628, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":629 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<< + * + * def copy(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_mslice; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy", 0); + + /* "View.MemoryView":633 + * def copy(self): + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &mslice) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); + + /* "View.MemoryView":635 + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + * + * slice_copy(self, &mslice) # <<<<<<<<<<<<<< + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); + + /* "View.MemoryView":636 + * + * slice_copy(self, &mslice) + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_C_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 636, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":641 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< + * + * def copy_fortran(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy_fortran", 0); + + /* "View.MemoryView":645 + * def copy_fortran(self): + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &src) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); + + /* "View.MemoryView":647 + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + * + * slice_copy(self, &src) # <<<<<<<<<<<<<< + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); + + /* "View.MemoryView":648 + * + * slice_copy(self, &src) + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_F_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 648, __pyx_L1_error) + __pyx_v_dst = __pyx_t_1; + + /* "View.MemoryView":653 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 653, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __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): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + +static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { + struct __pyx_memoryview_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); + + /* "View.MemoryView":658 + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< + * result.typeinfo = typeinfo + * return result + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_o); + __Pyx_GIVEREF(__pyx_v_o); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":659 + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_v_result->typeinfo = __pyx_v_typeinfo; + + /* "View.MemoryView":660 + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_check') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("memoryview_check", 0); + + /* "View.MemoryView":664 + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): + * return isinstance(o, memoryview) # <<<<<<<<<<<<<< + * + * cdef tuple _unellipsify(object index, int ndim): + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); + __pyx_r = __pyx_t_1; + goto __pyx_L0; + + /* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + +static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { + PyObject *__pyx_v_tup = NULL; + PyObject *__pyx_v_result = NULL; + int __pyx_v_have_slices; + int __pyx_v_seen_ellipsis; + CYTHON_UNUSED PyObject *__pyx_v_idx = NULL; + PyObject *__pyx_v_item = NULL; + Py_ssize_t __pyx_v_nslices; + 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)(PyObject *); + PyObject *__pyx_t_7 = NULL; + Py_ssize_t __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_unellipsify", 0); + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + __pyx_t_1 = PyTuple_Check(__pyx_v_index); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":672 + * """ + * if not isinstance(index, tuple): + * tup = (index,) # <<<<<<<<<<<<<< + * else: + * tup = index + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 672, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_index); + __Pyx_GIVEREF(__pyx_v_index); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); + __pyx_v_tup = __pyx_t_3; + __pyx_t_3 = 0; + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":674 + * tup = (index,) + * else: + * tup = index # <<<<<<<<<<<<<< + * + * result = [] + */ + /*else*/ { + __Pyx_INCREF(__pyx_v_index); + __pyx_v_tup = __pyx_v_index; + } + __pyx_L3:; + + /* "View.MemoryView":676 + * tup = index + * + * result = [] # <<<<<<<<<<<<<< + * have_slices = False + * seen_ellipsis = False + */ + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 676, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_result = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":677 + * + * result = [] + * have_slices = False # <<<<<<<<<<<<<< + * seen_ellipsis = False + * for idx, item in enumerate(tup): + */ + __pyx_v_have_slices = 0; + + /* "View.MemoryView":678 + * result = [] + * have_slices = False + * seen_ellipsis = False # <<<<<<<<<<<<<< + * for idx, item in enumerate(tup): + * if item is Ellipsis: + */ + __pyx_v_seen_ellipsis = 0; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + __Pyx_INCREF(__pyx_int_0); + __pyx_t_3 = __pyx_int_0; + if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) { + __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 679, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_4))) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } else { + if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } + } else { + __pyx_t_7 = __pyx_t_6(__pyx_t_4); + if (unlikely(!__pyx_t_7)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 679, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_7); + } + __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_INCREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3); + __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_7; + __pyx_t_7 = 0; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(1, 682, __pyx_L1_error) + __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__16); + __Pyx_GIVEREF(__pyx_slice__16); + PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__16); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":683 + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True # <<<<<<<<<<<<<< + * else: + * result.append(slice(None)) + */ + __pyx_v_seen_ellipsis = 1; + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + goto __pyx_L7; + } + + /* "View.MemoryView":685 + * seen_ellipsis = True + * else: + * result.append(slice(None)) # <<<<<<<<<<<<<< + * have_slices = True + * else: + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__16); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 685, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":686 + * else: + * result.append(slice(None)) + * have_slices = True # <<<<<<<<<<<<<< + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + */ + __pyx_v_have_slices = 1; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + goto __pyx_L6; + } + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + /*else*/ { + __pyx_t_2 = PySlice_Check(__pyx_v_item); + __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0); + __pyx_t_1 = __pyx_t_10; + __pyx_L9_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":689 + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + * raise TypeError("Cannot index with type '%s'" % type(item)) # <<<<<<<<<<<<<< + * + * have_slices = have_slices or isinstance(item, slice) + */ + __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_Raise(__pyx_t_11, 0, 0, 0); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __PYX_ERR(1, 689, __pyx_L1_error) + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + } + + /* "View.MemoryView":691 + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + * have_slices = have_slices or isinstance(item, slice) # <<<<<<<<<<<<<< + * result.append(item) + * + */ + __pyx_t_10 = (__pyx_v_have_slices != 0); + if (!__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = PySlice_Check(__pyx_v_item); + __pyx_t_2 = (__pyx_t_10 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_have_slices = __pyx_t_1; + + /* "View.MemoryView":692 + * + * have_slices = have_slices or isinstance(item, slice) + * result.append(item) # <<<<<<<<<<<<<< + * + * nslices = ndim - len(result) + */ + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 692, __pyx_L1_error) + } + __pyx_L6:; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":694 + * result.append(item) + * + * nslices = ndim - len(result) # <<<<<<<<<<<<<< + * if nslices: + * result.extend([slice(None)] * nslices) + */ + __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 694, __pyx_L1_error) + __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5); + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + __pyx_t_1 = (__pyx_v_nslices != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":696 + * nslices = ndim - len(result) + * if nslices: + * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<< + * + * return have_slices or nslices, tuple(result) + */ + __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__16); + __Pyx_GIVEREF(__pyx_slice__16); + PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__16); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 696, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + } + + /* "View.MemoryView":698 + * result.extend([slice(None)] * nslices) + * + * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + */ + __Pyx_XDECREF(__pyx_r); + if (!__pyx_v_have_slices) { + } else { + __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_L14_bool_binop_done:; + __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_r = ((PyObject*)__pyx_t_11); + __pyx_t_11 = 0; + goto __pyx_L0; + + /* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_tup); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_XDECREF(__pyx_v_item); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + +static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); + + /* "View.MemoryView":701 + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") + */ + __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim); + for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) { + __pyx_t_1 = __pyx_t_3; + __pyx_v_suboffset = (__pyx_t_1[0]); + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __PYX_ERR(1, 703, __pyx_L1_error) + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + } + } + + /* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { + int __pyx_v_new_ndim; + int __pyx_v_suboffset_dim; + int __pyx_v_dim; + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + __Pyx_memviewslice *__pyx_v_p_src; + struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; + __Pyx_memviewslice *__pyx_v_p_dst; + int *__pyx_v_p_suboffset_dim; + Py_ssize_t __pyx_v_start; + Py_ssize_t __pyx_v_stop; + Py_ssize_t __pyx_v_step; + int __pyx_v_have_start; + int __pyx_v_have_stop; + int __pyx_v_have_step; + PyObject *__pyx_v_index = NULL; + struct __pyx_memoryview_obj *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + struct __pyx_memoryview_obj *__pyx_t_4; + char *__pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + PyObject *(*__pyx_t_8)(PyObject *); + PyObject *__pyx_t_9 = NULL; + Py_ssize_t __pyx_t_10; + int __pyx_t_11; + Py_ssize_t __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memview_slice", 0); + + /* "View.MemoryView":711 + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): + * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< + * cdef bint negative_step + * cdef __Pyx_memviewslice src, dst + */ + __pyx_v_new_ndim = 0; + __pyx_v_suboffset_dim = -1; + + /* "View.MemoryView":718 + * + * + * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< + * + * cdef _memoryviewslice memviewsliceobj + */ + (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst)))); + + /* "View.MemoryView":722 + * cdef _memoryviewslice memviewsliceobj + * + * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(!Py_OptimizeFlag)) { + if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) { + PyErr_SetNone(PyExc_AssertionError); + __PYX_ERR(1, 722, __pyx_L1_error) + } + } + #endif + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":725 + * + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview # <<<<<<<<<<<<<< + * p_src = &memviewsliceobj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 725, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":726 + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, &src) + */ + __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + goto __pyx_L3; + } + + /* "View.MemoryView":728 + * p_src = &memviewsliceobj.from_slice + * else: + * slice_copy(memview, &src) # <<<<<<<<<<<<<< + * p_src = &src + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); + + /* "View.MemoryView":729 + * else: + * slice_copy(memview, &src) + * p_src = &src # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_p_src = (&__pyx_v_src); + } + __pyx_L3:; + + /* "View.MemoryView":735 + * + * + * dst.memview = p_src.memview # <<<<<<<<<<<<<< + * dst.data = p_src.data + * + */ + __pyx_t_4 = __pyx_v_p_src->memview; + __pyx_v_dst.memview = __pyx_t_4; + + /* "View.MemoryView":736 + * + * dst.memview = p_src.memview + * dst.data = p_src.data # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_v_p_src->data; + __pyx_v_dst.data = __pyx_t_5; + + /* "View.MemoryView":741 + * + * + * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< + * cdef int *p_suboffset_dim = &suboffset_dim + * cdef Py_ssize_t start, stop, step + */ + __pyx_v_p_dst = (&__pyx_v_dst); + + /* "View.MemoryView":742 + * + * cdef __Pyx_memviewslice *p_dst = &dst + * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< + * cdef Py_ssize_t start, stop, step + * cdef bint have_start, have_stop, have_step + */ + __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + __pyx_t_6 = 0; + if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { + __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + } else { + __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 746, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_8)) { + if (likely(PyList_CheckExact(__pyx_t_3))) { + if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } else { + if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } + } else { + __pyx_t_9 = __pyx_t_8(__pyx_t_3); + if (unlikely(!__pyx_t_9)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 746, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_9); + } + __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9); + __pyx_t_9 = 0; + __pyx_v_dim = __pyx_t_6; + __pyx_t_6 = (__pyx_t_6 + 1); + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":751 + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + * index, 0, 0, # start, stop, step # <<<<<<<<<<<<<< + * 0, 0, 0, # have_{start,stop,step} + * False) + */ + __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 751, __pyx_L1_error) + + /* "View.MemoryView":748 + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 748, __pyx_L1_error) + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + goto __pyx_L6; + } + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + __pyx_t_2 = (__pyx_v_index == Py_None); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":755 + * False) + * elif index is None: + * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + */ + (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; + + /* "View.MemoryView":756 + * elif index is None: + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 + */ + (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; + + /* "View.MemoryView":757 + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< + * new_ndim += 1 + * else: + */ + (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L; + + /* "View.MemoryView":758 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 # <<<<<<<<<<<<<< + * else: + * start = index.start or 0 + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + goto __pyx_L6; + } + + /* "View.MemoryView":760 + * new_ndim += 1 + * else: + * start = index.start or 0 # <<<<<<<<<<<<<< + * stop = index.stop or 0 + * step = index.step or 0 + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 760, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 760, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L7_bool_binop_done:; + __pyx_v_start = __pyx_t_10; + + /* "View.MemoryView":761 + * else: + * start = index.start or 0 + * stop = index.stop or 0 # <<<<<<<<<<<<<< + * step = index.step or 0 + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 761, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 761, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L9_bool_binop_done:; + __pyx_v_stop = __pyx_t_10; + + /* "View.MemoryView":762 + * start = index.start or 0 + * stop = index.stop or 0 + * step = index.step or 0 # <<<<<<<<<<<<<< + * + * have_start = index.start is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 762, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 762, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L11_bool_binop_done:; + __pyx_v_step = __pyx_t_10; + + /* "View.MemoryView":764 + * step = index.step or 0 + * + * have_start = index.start is not None # <<<<<<<<<<<<<< + * have_stop = index.stop is not None + * have_step = index.step is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_start = __pyx_t_1; + + /* "View.MemoryView":765 + * + * have_start = index.start is not None + * have_stop = index.stop is not None # <<<<<<<<<<<<<< + * have_step = index.step is not None + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_stop = __pyx_t_1; + + /* "View.MemoryView":766 + * have_start = index.start is not None + * have_stop = index.stop is not None + * have_step = index.step is not None # <<<<<<<<<<<<<< + * + * slice_memviewslice( + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_step = __pyx_t_1; + + /* "View.MemoryView":768 + * have_step = index.step is not None + * + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 768, __pyx_L1_error) + + /* "View.MemoryView":774 + * have_start, have_stop, have_step, + * True) + * new_ndim += 1 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + } + __pyx_L6:; + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":778 + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< + * memviewsliceobj.to_dtype_func, + * memview.dtype_is_object) + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 778, __pyx_L1_error) } + + /* "View.MemoryView":779 + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * else: + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 779, __pyx_L1_error) } + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 777, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 777, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + } + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + /*else*/ { + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":783 + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 782, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { + Py_ssize_t __pyx_v_new_shape; + int __pyx_v_negative_step; + int __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + __pyx_t_1 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":830 + * + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + } + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + __pyx_t_1 = (0 <= __pyx_v_start); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); + } + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":832 + * start += shape + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< + * else: + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 832, __pyx_L1_error) + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + } + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":835 + * else: + * + * negative_step = have_step != 0 and step < 0 # <<<<<<<<<<<<<< + * + * if have_step and step == 0: + */ + /*else*/ { + __pyx_t_1 = ((__pyx_v_have_step != 0) != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step < 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L6_bool_binop_done:; + __pyx_v_negative_step = __pyx_t_2; + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + __pyx_t_1 = (__pyx_v_have_step != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step == 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L9_bool_binop_done:; + if (__pyx_t_2) { + + /* "View.MemoryView":838 + * + * if have_step and step == 0: + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 838, __pyx_L1_error) + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + } + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + __pyx_t_2 = (__pyx_v_have_start != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":843 + * if have_start: + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if start < 0: + * start = 0 + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":845 + * start += shape + * if start < 0: + * start = 0 # <<<<<<<<<<<<<< + * elif start >= shape: + * if negative_step: + */ + __pyx_v_start = 0; + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + } + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + goto __pyx_L12; + } + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":848 + * elif start >= shape: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = shape + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L14; + } + + /* "View.MemoryView":850 + * start = shape - 1 + * else: + * start = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + /*else*/ { + __pyx_v_start = __pyx_v_shape; + } + __pyx_L14:; + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + } + __pyx_L12:; + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + goto __pyx_L11; + } + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":853 + * else: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = 0 + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L15; + } + + /* "View.MemoryView":855 + * start = shape - 1 + * else: + * start = 0 # <<<<<<<<<<<<<< + * + * if have_stop: + */ + /*else*/ { + __pyx_v_start = 0; + } + __pyx_L15:; + } + __pyx_L11:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + __pyx_t_2 = (__pyx_v_have_stop != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":859 + * if have_stop: + * if stop < 0: + * stop += shape # <<<<<<<<<<<<<< + * if stop < 0: + * stop = 0 + */ + __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":861 + * stop += shape + * if stop < 0: + * stop = 0 # <<<<<<<<<<<<<< + * elif stop > shape: + * stop = shape + */ + __pyx_v_stop = 0; + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + } + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + goto __pyx_L17; + } + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":863 + * stop = 0 + * elif stop > shape: + * stop = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + __pyx_v_stop = __pyx_v_shape; + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + } + __pyx_L17:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + goto __pyx_L16; + } + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":866 + * else: + * if negative_step: + * stop = -1 # <<<<<<<<<<<<<< + * else: + * stop = shape + */ + __pyx_v_stop = -1L; + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + goto __pyx_L19; + } + + /* "View.MemoryView":868 + * stop = -1 + * else: + * stop = shape # <<<<<<<<<<<<<< + * + * if not have_step: + */ + /*else*/ { + __pyx_v_stop = __pyx_v_shape; + } + __pyx_L19:; + } + __pyx_L16:; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":871 + * + * if not have_step: + * step = 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_step = 1; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + } + + /* "View.MemoryView":875 + * + * with cython.cdivision(True): + * new_shape = (stop - start) // step # <<<<<<<<<<<<<< + * + * if (stop - start) - step * new_shape: + */ + __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":878 + * + * if (stop - start) - step * new_shape: + * new_shape += 1 # <<<<<<<<<<<<<< + * + * if new_shape < 0: + */ + __pyx_v_new_shape = (__pyx_v_new_shape + 1); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + } + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":881 + * + * if new_shape < 0: + * new_shape = 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_new_shape = 0; + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + } + + /* "View.MemoryView":884 + * + * + * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset + */ + (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); + + /* "View.MemoryView":885 + * + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< + * dst.suboffsets[new_ndim] = suboffset + * + */ + (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; + + /* "View.MemoryView":886 + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; + } + __pyx_L3:; + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":890 + * + * if suboffset_dim[0] < 0: + * dst.data += start * stride # <<<<<<<<<<<<<< + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride + */ + __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + goto __pyx_L23; + } + + /* "View.MemoryView":892 + * dst.data += start * stride + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< + * + * if suboffset >= 0: + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_suboffset_dim[0]); + (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); + } + __pyx_L23:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":897 + * if not is_slice: + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + */ + __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + goto __pyx_L26; + } + + /* "View.MemoryView":899 + * dst.data = ( dst.data)[0] + suboffset + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< + * "must be indexed and not sliced", dim) + * else: + */ + /*else*/ { + + /* "View.MemoryView":900 + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<< + * else: + * suboffset_dim[0] = new_ndim + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 899, __pyx_L1_error) + } + __pyx_L26:; + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + goto __pyx_L25; + } + + /* "View.MemoryView":902 + * "must be indexed and not sliced", dim) + * else: + * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< + * + * return 0 + */ + /*else*/ { + (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; + } + __pyx_L25:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + } + + /* "View.MemoryView":904 + * suboffset_dim[0] = new_ndim + * + * return 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + +static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_suboffset; + Py_ssize_t __pyx_v_itemsize; + char *__pyx_v_resultp; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("pybuffer_index", 0); + + /* "View.MemoryView":912 + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< + * cdef Py_ssize_t itemsize = view.itemsize + * cdef char *resultp + */ + __pyx_v_suboffset = -1L; + + /* "View.MemoryView":913 + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< + * cdef char *resultp + * + */ + __pyx_t_1 = __pyx_v_view->itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":917 + * + * if view.ndim == 0: + * shape = view.len / itemsize # <<<<<<<<<<<<<< + * stride = itemsize + * else: + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 917, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 917, __pyx_L1_error) + } + __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize); + + /* "View.MemoryView":918 + * if view.ndim == 0: + * shape = view.len / itemsize + * stride = itemsize # <<<<<<<<<<<<<< + * else: + * shape = view.shape[dim] + */ + __pyx_v_stride = __pyx_v_itemsize; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + goto __pyx_L3; + } + + /* "View.MemoryView":920 + * stride = itemsize + * else: + * shape = view.shape[dim] # <<<<<<<<<<<<<< + * stride = view.strides[dim] + * if view.suboffsets != NULL: + */ + /*else*/ { + __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); + + /* "View.MemoryView":921 + * else: + * shape = view.shape[dim] + * stride = view.strides[dim] # <<<<<<<<<<<<<< + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] + */ + __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":923 + * stride = view.strides[dim] + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< + * + * if index < 0: + */ + __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + } + } + __pyx_L3:; + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":926 + * + * if index < 0: + * index += view.shape[dim] # <<<<<<<<<<<<<< + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + */ + __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":928 + * index += view.shape[dim] + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * if index >= shape: + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 928, __pyx_L1_error) + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + } + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":931 + * + * if index >= shape: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * resultp = bufp + index * stride + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 931, __pyx_L1_error) + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":933 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * resultp = bufp + index * stride # <<<<<<<<<<<<<< + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset + */ + __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":935 + * resultp = bufp + index * stride + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< + * + * return resultp + */ + __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + } + + /* "View.MemoryView":937 + * resultp = ( resultp)[0] + suboffset + * + * return resultp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_resultp; + goto __pyx_L0; + + /* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + +static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { + int __pyx_v_ndim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_r; + int __pyx_t_1; + Py_ssize_t *__pyx_t_2; + long __pyx_t_3; + long __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":944 + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: + * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< + * + * cdef Py_ssize_t *shape = memslice.shape + */ + __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; + __pyx_v_ndim = __pyx_t_1; + + /* "View.MemoryView":946 + * cdef int ndim = memslice.memview.view.ndim + * + * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< + * cdef Py_ssize_t *strides = memslice.strides + * + */ + __pyx_t_2 = __pyx_v_memslice->shape; + __pyx_v_shape = __pyx_t_2; + + /* "View.MemoryView":947 + * + * cdef Py_ssize_t *shape = memslice.shape + * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __pyx_v_memslice->strides; + __pyx_v_strides = __pyx_t_2; + + /* "View.MemoryView":951 + * + * cdef int i, j + * for i in range(ndim / 2): # <<<<<<<<<<<<<< + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + */ + __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2); + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":952 + * cdef int i, j + * for i in range(ndim / 2): + * j = ndim - 1 - i # <<<<<<<<<<<<<< + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] + */ + __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); + + /* "View.MemoryView":953 + * for i in range(ndim / 2): + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< + * shape[i], shape[j] = shape[j], shape[i] + * + */ + __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]); + __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]); + (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5; + (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6; + + /* "View.MemoryView":954 + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + */ + __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]); + __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]); + (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6; + (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5; + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0); + if (!__pyx_t_8) { + } else { + __pyx_t_7 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0); + __pyx_t_7 = __pyx_t_8; + __pyx_L6_bool_binop_done:; + if (__pyx_t_7) { + + /* "View.MemoryView":957 + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< + * + * return 1 + */ + __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 957, __pyx_L1_error) + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + } + } + + /* "View.MemoryView":959 + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + * return 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 1; + goto __pyx_L0; + + /* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = 0; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + +/* Python wrapper */ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":977 + * + * def __dealloc__(self): + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1); + + /* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":981 + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) # <<<<<<<<<<<<<< + * else: + * return memoryview.convert_item_to_object(self, itemp) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 981, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + } + + /* "View.MemoryView":983 + * return self.to_object_func(itemp) + * else: + * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 983, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":987 + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< + * else: + * memoryview.assign_item_from_object(self, itemp, value) + */ + __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 987, __pyx_L1_error) + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":989 + * self.to_dtype_func(itemp, value) + * else: + * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< + * + * @property + */ + /*else*/ { + __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 989, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":993 + * @property + * def base(self): + * return self.from_object # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->from_object); + __pyx_r = __pyx_v_self->from_object; + goto __pyx_L0; + + /* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_TypeInfo *__pyx_t_4; + Py_buffer __pyx_t_5; + Py_ssize_t *__pyx_t_6; + Py_ssize_t *__pyx_t_7; + Py_ssize_t *__pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_fromslice", 0); + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1008 + * + * if memviewslice.memview == Py_None: + * return None # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "View.MemoryView":1013 + * + * + * result = _memoryviewslice(None, 0, dtype_is_object) # <<<<<<<<<<<<<< + * + * result.from_slice = memviewslice + */ + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1015 + * result = _memoryviewslice(None, 0, dtype_is_object) + * + * result.from_slice = memviewslice # <<<<<<<<<<<<<< + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + */ + __pyx_v_result->from_slice = __pyx_v_memviewslice; + + /* "View.MemoryView":1016 + * + * result.from_slice = memviewslice + * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< + * + * result.from_object = ( memviewslice.memview).base + */ + __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); + + /* "View.MemoryView":1018 + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + * result.from_object = ( memviewslice.memview).base # <<<<<<<<<<<<<< + * result.typeinfo = memviewslice.memview.typeinfo + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1018, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_result->from_object); + __Pyx_DECREF(__pyx_v_result->from_object); + __pyx_v_result->from_object = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":1019 + * + * result.from_object = ( memviewslice.memview).base + * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< + * + * result.view = memviewslice.memview.view + */ + __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; + __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; + + /* "View.MemoryView":1021 + * result.typeinfo = memviewslice.memview.typeinfo + * + * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + */ + __pyx_t_5 = __pyx_v_memviewslice.memview->view; + __pyx_v_result->__pyx_base.view = __pyx_t_5; + + /* "View.MemoryView":1022 + * + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + */ + __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); + + /* "View.MemoryView":1023 + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data + * result.view.ndim = ndim # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; + + /* "View.MemoryView":1024 + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; + + /* "View.MemoryView":1025 + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1028 + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< + * else: + * result.flags = PyBUF_RECORDS_RO + */ + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1030 + * result.flags = PyBUF_RECORDS + * else: + * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<< + * + * result.view.shape = result.from_slice.shape + */ + /*else*/ { + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO; + } + __pyx_L4:; + + /* "View.MemoryView":1032 + * result.flags = PyBUF_RECORDS_RO + * + * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< + * result.view.strides = result.from_slice.strides + * + */ + __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); + + /* "View.MemoryView":1033 + * + * result.view.shape = result.from_slice.shape + * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); + + /* "View.MemoryView":1036 + * + * + * result.view.suboffsets = NULL # <<<<<<<<<<<<<< + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + */ + __pyx_v_result->__pyx_base.view.suboffsets = NULL; + + /* "View.MemoryView":1037 + * + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + */ + __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_v_suboffset = (__pyx_t_6[0]); + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1039 + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); + + /* "View.MemoryView":1040 + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + * break # <<<<<<<<<<<<<< + * + * result.view.len = result.view.itemsize + */ + goto __pyx_L6_break; + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + } + } + __pyx_L6_break:; + + /* "View.MemoryView":1042 + * break + * + * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< + * for length in result.view.shape[:ndim]: + * result.view.len *= length + */ + __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + + /* "View.MemoryView":1043 + * + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<< + * result.view.len *= length + * + */ + __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1044 + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: + * result.view.len *= length # <<<<<<<<<<<<<< + * + * result.to_object_func = to_object_func + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + } + + /* "View.MemoryView":1046 + * result.view.len *= length + * + * result.to_object_func = to_object_func # <<<<<<<<<<<<<< + * result.to_dtype_func = to_dtype_func + * + */ + __pyx_v_result->to_object_func = __pyx_v_to_object_func; + + /* "View.MemoryView":1047 + * + * result.to_object_func = to_object_func + * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; + + /* "View.MemoryView":1049 + * result.to_dtype_func = to_dtype_func + * + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { + struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; + __Pyx_memviewslice *__pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_slice_from_memview", 0); + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1056 + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): + * obj = memview # <<<<<<<<<<<<<< + * return &obj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 1056, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":1057 + * if isinstance(memview, _memoryviewslice): + * obj = memview + * return &obj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, mslice) + */ + __pyx_r = (&__pyx_v_obj->from_slice); + goto __pyx_L0; + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + } + + /* "View.MemoryView":1059 + * return &obj.from_slice + * else: + * slice_copy(memview, mslice) # <<<<<<<<<<<<<< + * return mslice + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); + + /* "View.MemoryView":1060 + * else: + * slice_copy(memview, mslice) + * return mslice # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_slice_copy') + */ + __pyx_r = __pyx_v_mslice; + goto __pyx_L0; + } + + /* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_obj); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { + int __pyx_v_dim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + Py_ssize_t *__pyx_v_suboffsets; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + __Pyx_RefNannySetupContext("slice_copy", 0); + + /* "View.MemoryView":1067 + * cdef (Py_ssize_t*) shape, strides, suboffsets + * + * shape = memview.view.shape # <<<<<<<<<<<<<< + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets + */ + __pyx_t_1 = __pyx_v_memview->view.shape; + __pyx_v_shape = __pyx_t_1; + + /* "View.MemoryView":1068 + * + * shape = memview.view.shape + * strides = memview.view.strides # <<<<<<<<<<<<<< + * suboffsets = memview.view.suboffsets + * + */ + __pyx_t_1 = __pyx_v_memview->view.strides; + __pyx_v_strides = __pyx_t_1; + + /* "View.MemoryView":1069 + * shape = memview.view.shape + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< + * + * dst.memview = <__pyx_memoryview *> memview + */ + __pyx_t_1 = __pyx_v_memview->view.suboffsets; + __pyx_v_suboffsets = __pyx_t_1; + + /* "View.MemoryView":1071 + * suboffsets = memview.view.suboffsets + * + * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< + * dst.data = memview.view.buf + * + */ + __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); + + /* "View.MemoryView":1072 + * + * dst.memview = <__pyx_memoryview *> memview + * dst.data = memview.view.buf # <<<<<<<<<<<<<< + * + * for dim in range(memview.view.ndim): + */ + __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); + + /* "View.MemoryView":1074 + * dst.data = memview.view.buf + * + * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + */ + __pyx_t_2 = __pyx_v_memview->view.ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_dim = __pyx_t_4; + + /* "View.MemoryView":1075 + * + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + */ + (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); + + /* "View.MemoryView":1076 + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + * + */ + (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); + + /* "View.MemoryView":1077 + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object') + */ + if ((__pyx_v_suboffsets != 0)) { + __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]); + } else { + __pyx_t_5 = -1L; + } + (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5; + } + + /* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { + __Pyx_memviewslice __pyx_v_memviewslice; + 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("memoryview_copy", 0); + + /* "View.MemoryView":1083 + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< + * return memoryview_copy_from_slice(memview, &memviewslice) + * + */ + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); + + /* "View.MemoryView":1084 + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) + * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object_from_slice') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { + PyObject *(*__pyx_v_to_object_func)(char *); + int (*__pyx_v_to_dtype_func)(char *, PyObject *); + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *(*__pyx_t_3)(char *); + int (*__pyx_t_4)(char *, PyObject *); + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1095 + * + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + */ + __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; + __pyx_v_to_object_func = __pyx_t_3; + + /* "View.MemoryView":1096 + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< + * else: + * to_object_func = NULL + */ + __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; + __pyx_v_to_dtype_func = __pyx_t_4; + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1098 + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + * to_object_func = NULL # <<<<<<<<<<<<<< + * to_dtype_func = NULL + * + */ + /*else*/ { + __pyx_v_to_object_func = NULL; + + /* "View.MemoryView":1099 + * else: + * to_object_func = NULL + * to_dtype_func = NULL # <<<<<<<<<<<<<< + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + */ + __pyx_v_to_dtype_func = NULL; + } + __pyx_L3:; + + /* "View.MemoryView":1101 + * to_dtype_func = NULL + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< + * to_object_func, to_dtype_func, + * memview.dtype_is_object) + */ + __Pyx_XDECREF(__pyx_r); + + /* "View.MemoryView":1103 + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + * to_object_func, to_dtype_func, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + +static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { + Py_ssize_t __pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + __pyx_t_1 = ((__pyx_v_arg < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1111 + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: + * return -arg # <<<<<<<<<<<<<< + * else: + * return arg + */ + __pyx_r = (-__pyx_v_arg); + goto __pyx_L0; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + } + + /* "View.MemoryView":1113 + * return -arg + * else: + * return arg # <<<<<<<<<<<<<< + * + * @cname('__pyx_get_best_slice_order') + */ + /*else*/ { + __pyx_r = __pyx_v_arg; + goto __pyx_L0; + } + + /* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + +static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { + int __pyx_v_i; + Py_ssize_t __pyx_v_c_stride; + Py_ssize_t __pyx_v_f_stride; + char __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1121 + * """ + * cdef int i + * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< + * cdef Py_ssize_t f_stride = 0 + * + */ + __pyx_v_c_stride = 0; + + /* "View.MemoryView":1122 + * cdef int i + * cdef Py_ssize_t c_stride = 0 + * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_f_stride = 0; + + /* "View.MemoryView":1124 + * cdef Py_ssize_t f_stride = 0 + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1126 + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1127 + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + goto __pyx_L4_break; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L4_break:; + + /* "View.MemoryView":1129 + * break + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + */ + __pyx_t_1 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_1; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1131 + * for i in range(ndim): + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1132 + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + */ + goto __pyx_L7_break; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L7_break:; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1135 + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + * return 'C' # <<<<<<<<<<<<<< + * else: + * return 'F' + */ + __pyx_r = 'C'; + goto __pyx_L0; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + } + + /* "View.MemoryView":1137 + * return 'C' + * else: + * return 'F' # <<<<<<<<<<<<<< + * + * @cython.cdivision(True) + */ + /*else*/ { + __pyx_r = 'F'; + goto __pyx_L0; + } + + /* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + +static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; + Py_ssize_t __pyx_v_dst_extent; + Py_ssize_t __pyx_v_src_stride; + Py_ssize_t __pyx_v_dst_stride; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + + /* "View.MemoryView":1147 + * + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + */ + __pyx_v_src_extent = (__pyx_v_src_shape[0]); + + /* "View.MemoryView":1148 + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] + */ + __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); + + /* "View.MemoryView":1149 + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + */ + __pyx_v_src_stride = (__pyx_v_src_strides[0]); + + /* "View.MemoryView":1150 + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + + /* "View.MemoryView":1154 + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + */ + __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); + if (__pyx_t_2) { + __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); + } + __pyx_t_3 = (__pyx_t_2 != 0); + __pyx_t_1 = __pyx_t_3; + __pyx_L5_bool_binop_done:; + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + if (__pyx_t_1) { + + /* "View.MemoryView":1155 + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent))); + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1157 + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __pyx_t_5 = __pyx_t_4; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1158 + * else: + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< + * src_data += src_stride + * dst_data += dst_stride + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize)); + + /* "View.MemoryView":1159 + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * else: + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1160 + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L4:; + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1162 + * dst_data += dst_stride + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * _copy_strided_to_strided(src_data, src_strides + 1, + * dst_data, dst_strides + 1, + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __pyx_t_5 = __pyx_t_4; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1163 + * else: + * for i in range(dst_extent): + * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< + * dst_data, dst_strides + 1, + * src_shape + 1, dst_shape + 1, + */ + _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); + + /* "View.MemoryView":1167 + * src_shape + 1, dst_shape + 1, + * ndim - 1, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1168 + * ndim - 1, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + + /* function exit code */ +} + +/* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + +static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + + /* "View.MemoryView":1173 + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< + * src.shape, dst.shape, ndim, itemsize) + * + */ + _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_size; + Py_ssize_t __pyx_r; + Py_ssize_t __pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + + /* "View.MemoryView":1179 + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<< + * + * for shape in src.shape[:ndim]: + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_size = __pyx_t_1; + + /* "View.MemoryView":1181 + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + * + * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<< + * size *= shape + * + */ + __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim); + for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_shape = (__pyx_t_2[0]); + + /* "View.MemoryView":1182 + * + * for shape in src.shape[:ndim]: + * size *= shape # <<<<<<<<<<<<<< + * + * return size + */ + __pyx_v_size = (__pyx_v_size * __pyx_v_shape); + } + + /* "View.MemoryView":1184 + * size *= shape + * + * return size # <<<<<<<<<<<<<< + * + * @cname('__pyx_fill_contig_strides_array') + */ + __pyx_r = __pyx_v_size; + goto __pyx_L0; + + /* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { + int __pyx_v_idx; + Py_ssize_t __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + __pyx_t_1 = ((__pyx_v_order == 'F') != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1197 + * + * if order == 'F': + * for idx in range(ndim): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + __pyx_t_2 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_idx = __pyx_t_4; + + /* "View.MemoryView":1198 + * if order == 'F': + * for idx in range(ndim): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * else: + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1199 + * for idx in range(ndim): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * else: + * for idx in range(ndim - 1, -1, -1): + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1201 + * stride *= shape[idx] + * else: + * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + /*else*/ { + for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { + __pyx_v_idx = __pyx_t_2; + + /* "View.MemoryView":1202 + * else: + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1203 + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * + * return stride + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + } + __pyx_L3:; + + /* "View.MemoryView":1205 + * stride *= shape[idx] + * + * return stride # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_data_to_temp') + */ + __pyx_r = __pyx_v_stride; + goto __pyx_L0; + + /* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { + int __pyx_v_i; + void *__pyx_v_result; + size_t __pyx_v_itemsize; + size_t __pyx_v_size; + void *__pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + struct __pyx_memoryview_obj *__pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1219 + * cdef void *result + * + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef size_t size = slice_get_size(src, ndim) + * + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1220 + * + * cdef size_t itemsize = src.memview.view.itemsize + * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< + * + * result = malloc(size) + */ + __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); + + /* "View.MemoryView":1222 + * cdef size_t size = slice_get_size(src, ndim) + * + * result = malloc(size) # <<<<<<<<<<<<<< + * if not result: + * _err(MemoryError, NULL) + */ + __pyx_v_result = malloc(__pyx_v_size); + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1224 + * result = malloc(size) + * if not result: + * _err(MemoryError, NULL) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1224, __pyx_L1_error) + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + } + + /* "View.MemoryView":1227 + * + * + * tmpslice.data = result # <<<<<<<<<<<<<< + * tmpslice.memview = src.memview + * for i in range(ndim): + */ + __pyx_v_tmpslice->data = ((char *)__pyx_v_result); + + /* "View.MemoryView":1228 + * + * tmpslice.data = result + * tmpslice.memview = src.memview # <<<<<<<<<<<<<< + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + */ + __pyx_t_4 = __pyx_v_src->memview; + __pyx_v_tmpslice->memview = __pyx_t_4; + + /* "View.MemoryView":1229 + * tmpslice.data = result + * tmpslice.memview = src.memview + * for i in range(ndim): # <<<<<<<<<<<<<< + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1230 + * tmpslice.memview = src.memview + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< + * tmpslice.suboffsets[i] = -1 + * + */ + (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); + + /* "View.MemoryView":1231 + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, + */ + (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1233 + * tmpslice.suboffsets[i] = -1 + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, # <<<<<<<<<<<<<< + * ndim, order) + * + */ + (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order)); + + /* "View.MemoryView":1237 + * + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1239 + * for i in range(ndim): + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< + * + * if slice_is_contig(src[0], order, ndim): + */ + (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + } + } + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1242 + * + * if slice_is_contig(src[0], order, ndim): + * memcpy(result, src.data, size) # <<<<<<<<<<<<<< + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + */ + (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size)); + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":1244 + * memcpy(result, src.data, size) + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< + * + * return result + */ + /*else*/ { + copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); + } + __pyx_L9:; + + /* "View.MemoryView":1246 + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = NULL; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + +static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_extents", 0); + + /* "View.MemoryView":1254 + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + * (i, extent1, extent2)) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err_dim') + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":1253 + * cdef int _err_extents(int i, Py_ssize_t extent1, + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % # <<<<<<<<<<<<<< + * (i, extent1, extent2)) + * + */ + __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(1, 1253, __pyx_L1_error) + + /* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + + /* 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("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + +static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_dim", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1258 + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: + * raise error(msg.decode('ascii') % dim) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err') + */ + __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1258, __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_INCREF(__pyx_v_error); + __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && 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_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 1258, __pyx_L1_error) + + /* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + + /* 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("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + +static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) { + 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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + __pyx_t_1 = ((__pyx_v_msg != NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":1263 + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: + * raise error(msg.decode('ascii')) # <<<<<<<<<<<<<< + * else: + * raise error + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_error); + __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 1263, __pyx_L1_error) + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + } + + /* "View.MemoryView":1265 + * raise error(msg.decode('ascii')) + * else: + * raise error # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_contents') + */ + /*else*/ { + __Pyx_Raise(__pyx_v_error, 0, 0, 0); + __PYX_ERR(1, 1265, __pyx_L1_error) + } + + /* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + + /* 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("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { + void *__pyx_v_tmpdata; + size_t __pyx_v_itemsize; + int __pyx_v_i; + char __pyx_v_order; + int __pyx_v_broadcasting; + int __pyx_v_direct_copy; + __Pyx_memviewslice __pyx_v_tmp; + int __pyx_v_ndim; + int __pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + void *__pyx_t_7; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1276 + * Check for overlapping memory and verify the shapes. + * """ + * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + */ + __pyx_v_tmpdata = NULL; + + /* "View.MemoryView":1277 + * """ + * cdef void *tmpdata = NULL + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + */ + __pyx_t_1 = __pyx_v_src.memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1279 + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< + * cdef bint broadcasting = False + * cdef bint direct_copy = False + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); + + /* "View.MemoryView":1280 + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False # <<<<<<<<<<<<<< + * cdef bint direct_copy = False + * cdef __Pyx_memviewslice tmp + */ + __pyx_v_broadcasting = 0; + + /* "View.MemoryView":1281 + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False + * cdef bint direct_copy = False # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice tmp + * + */ + __pyx_v_direct_copy = 0; + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1285 + * + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1287 + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< + * + * cdef int ndim = max(src_ndim, dst_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + } + __pyx_L3:; + + /* "View.MemoryView":1289 + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + __pyx_t_3 = __pyx_v_dst_ndim; + __pyx_t_4 = __pyx_v_src_ndim; + if (((__pyx_t_3 > __pyx_t_4) != 0)) { + __pyx_t_5 = __pyx_t_3; + } else { + __pyx_t_5 = __pyx_t_4; + } + __pyx_v_ndim = __pyx_t_5; + + /* "View.MemoryView":1291 + * cdef int ndim = max(src_ndim, dst_ndim) + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + */ + __pyx_t_5 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_5; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1294 + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + * broadcasting = True # <<<<<<<<<<<<<< + * src.strides[i] = 0 + * else: + */ + __pyx_v_broadcasting = 1; + + /* "View.MemoryView":1295 + * if src.shape[i] == 1: + * broadcasting = True + * src.strides[i] = 0 # <<<<<<<<<<<<<< + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) + */ + (__pyx_v_src.strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + goto __pyx_L7; + } + + /* "View.MemoryView":1297 + * src.strides[i] = 0 + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< + * + * if src.suboffsets[i] >= 0: + */ + /*else*/ { + __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + } + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1300 + * + * if src.suboffsets[i] >= 0: + * _err_dim(ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< + * + * if slices_overlap(&src, &dst, ndim, itemsize): + */ + __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1300, __pyx_L1_error) + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + } + } + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1305 + * + * if not slice_is_contig(src, order, ndim): + * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + } + + /* "View.MemoryView":1307 + * order = get_best_order(&dst, ndim) + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< + * src = tmp + * + */ + __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1307, __pyx_L1_error) + __pyx_v_tmpdata = __pyx_t_7; + + /* "View.MemoryView":1308 + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + * src = tmp # <<<<<<<<<<<<<< + * + * if not broadcasting: + */ + __pyx_v_src = __pyx_v_tmp; + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1314 + * + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<< + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim); + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + goto __pyx_L12; + } + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1316 + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<< + * + * if direct_copy: + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim); + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + } + __pyx_L12:; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_2 = (__pyx_v_direct_copy != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1320 + * if direct_copy: + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1321 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + */ + (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim))); + + /* "View.MemoryView":1322 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * free(tmpdata) + * return 0 + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1323 + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1324 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * if order == 'F' == get_best_order(&dst, ndim): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = (__pyx_v_order == 'F'); + if (__pyx_t_2) { + __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); + } + __pyx_t_8 = (__pyx_t_2 != 0); + if (__pyx_t_8) { + + /* "View.MemoryView":1329 + * + * + * transpose_memslice(&src) # <<<<<<<<<<<<<< + * transpose_memslice(&dst) + * + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1329, __pyx_L1_error) + + /* "View.MemoryView":1330 + * + * transpose_memslice(&src) + * transpose_memslice(&dst) # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1330, __pyx_L1_error) + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1332 + * transpose_memslice(&dst) + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1333 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + */ + copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1334 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * free(tmpdata) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1336 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1337 + * + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_broadcast_leading') + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) { + int __pyx_v_i; + int __pyx_v_offset; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + + /* "View.MemoryView":1344 + * int ndim_other) nogil: + * cdef int i + * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); + + /* "View.MemoryView":1346 + * cdef int offset = ndim_other - ndim + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1347 + * + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<< + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + */ + (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]); + + /* "View.MemoryView":1348 + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<< + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + */ + (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1349 + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<< + * + * for i in range(offset): + */ + (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]); + } + + /* "View.MemoryView":1351 + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + * for i in range(offset): # <<<<<<<<<<<<<< + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + */ + __pyx_t_1 = __pyx_v_offset; + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1352 + * + * for i in range(offset): + * mslice.shape[i] = 1 # <<<<<<<<<<<<<< + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 + */ + (__pyx_v_mslice->shape[__pyx_v_i]) = 1; + + /* "View.MemoryView":1353 + * for i in range(offset): + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<< + * mslice.suboffsets[i] = -1 + * + */ + (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]); + + /* "View.MemoryView":1354 + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { + int __pyx_t_1; + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + __pyx_t_1 = (__pyx_v_dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1367 + * + * if dtype_is_object: + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, # <<<<<<<<<<<<<< + * dst.strides, ndim, inc) + * + */ + __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + } + + /* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + + /* function exit code */ +} + +/* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + __Pyx_RefNannyDeclarations + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); + + /* "View.MemoryView":1374 + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif +} + +/* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + +static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); + + /* "View.MemoryView":1381 + * cdef Py_ssize_t i + * + * for i in range(shape[0]): # <<<<<<<<<<<<<< + * if ndim == 1: + * if inc: + */ + __pyx_t_1 = (__pyx_v_shape[0]); + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + __pyx_t_4 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + __pyx_t_4 = (__pyx_v_inc != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1384 + * if ndim == 1: + * if inc: + * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * Py_DECREF(( data)[0]) + */ + Py_INCREF((((PyObject **)__pyx_v_data)[0])); + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":1386 + * Py_INCREF(( data)[0]) + * else: + * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + */ + /*else*/ { + Py_DECREF((((PyObject **)__pyx_v_data)[0])); + } + __pyx_L6:; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + goto __pyx_L5; + } + + /* "View.MemoryView":1388 + * Py_DECREF(( data)[0]) + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, inc) + * + */ + /*else*/ { + + /* "View.MemoryView":1389 + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + * ndim - 1, inc) # <<<<<<<<<<<<<< + * + * data += strides[0] + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); + } + __pyx_L5:; + + /* "View.MemoryView":1391 + * ndim - 1, inc) + * + * data += strides[0] # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0])); + } + + /* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { + + /* "View.MemoryView":1400 + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1401 + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, # <<<<<<<<<<<<<< + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1403 + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + +static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_extent; + int __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + + /* "View.MemoryView":1411 + * size_t itemsize, void *item) nogil: + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t extent = shape[0] + * + */ + __pyx_v_stride = (__pyx_v_strides[0]); + + /* "View.MemoryView":1412 + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] + * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_extent = (__pyx_v_shape[0]); + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1415 + * + * if ndim == 1: + * for i in range(extent): # <<<<<<<<<<<<<< + * memcpy(data, item, itemsize) + * data += stride + */ + __pyx_t_2 = __pyx_v_extent; + __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; + + /* "View.MemoryView":1416 + * if ndim == 1: + * for i in range(extent): + * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< + * data += stride + * else: + */ + (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize)); + + /* "View.MemoryView":1417 + * for i in range(extent): + * memcpy(data, item, itemsize) + * data += stride # <<<<<<<<<<<<<< + * else: + * for i in range(extent): + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1419 + * data += stride + * else: + * for i in range(extent): # <<<<<<<<<<<<<< + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + */ + /*else*/ { + __pyx_t_2 = __pyx_v_extent; + __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; + + /* "View.MemoryView":1420 + * else: + * for i in range(extent): + * _slice_assign_scalar(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, itemsize, item) + * data += stride + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1422 + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + * data += stride # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + + /* function exit code */ +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__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_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_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; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb068931) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + */ + __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_Enum(__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_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __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_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[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) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->name); + __Pyx_DECREF(__pyx_v___pyx_result->name); + __pyx_v___pyx_result->name = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[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_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = ((__pyx_t_3 > 1) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< + */ + __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 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 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_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_tp_new_6common_15profile_classes_CosmicBase(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_obj_6common_15profile_classes_CosmicBase *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_obj_6common_15profile_classes_CosmicBase *)o); + p->SNAP = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->CENTER = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->r200.data = NULL; + p->r200.memview = NULL; + return o; +} + +static void __pyx_tp_dealloc_6common_15profile_classes_CosmicBase(PyObject *o) { + struct __pyx_obj_6common_15profile_classes_CosmicBase *p = (struct __pyx_obj_6common_15profile_classes_CosmicBase *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + Py_CLEAR(p->SNAP); + Py_CLEAR(p->CENTER); + __PYX_XDEC_MEMVIEW(&p->r200, 1); + (*Py_TYPE(o)->tp_free)(o); +} + +static PyMethodDef __pyx_methods_6common_15profile_classes_CosmicBase[] = { + {"getR200s", (PyCFunction)__pyx_pw_6common_15profile_classes_10CosmicBase_3getR200s, METH_NOARGS, __pyx_doc_6common_15profile_classes_10CosmicBase_2getR200s}, + {"getMassesCentersBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_5getMassesCentersBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_4getMassesCentersBase}, + {"getShapeCatLocalBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_7getShapeCatLocalBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_6getShapeCatLocalBase}, + {"getShapeCatGlobalBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_9getShapeCatGlobalBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_8getShapeCatGlobalBase}, + {"getShapeCatVelLocalBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_11getShapeCatVelLocalBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_10getShapeCatVelLocalBase}, + {"getShapeCatVelGlobalBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_13getShapeCatVelGlobalBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_12getShapeCatVelGlobalBase}, + {"dumpShapeCatLocalBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_15dumpShapeCatLocalBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_14dumpShapeCatLocalBase}, + {"dumpShapeCatGlobalBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_17dumpShapeCatGlobalBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_16dumpShapeCatGlobalBase}, + {"dumpShapeVelCatLocalBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_19dumpShapeVelCatLocalBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_18dumpShapeVelCatLocalBase}, + {"dumpShapeVelCatGlobalBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_21dumpShapeVelCatGlobalBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_20dumpShapeVelCatGlobalBase}, + {"plotShapeProfsBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_23plotShapeProfsBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_22plotShapeProfsBase}, + {"plotLocalTHistBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_25plotLocalTHistBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_24plotLocalTHistBase}, + {"plotGlobalTHistBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_27plotGlobalTHistBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_26plotGlobalTHistBase}, + {"getDensProfsBestFitsBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_29getDensProfsBestFitsBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_28getDensProfsBestFitsBase}, + {"getConcentrationsBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_31getConcentrationsBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_30getConcentrationsBase}, + {"getDensProfsSphDirectBinningBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_33getDensProfsSphDirectBinningBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_32getDensProfsSphDirectBinningBase}, + {"getDensProfsEllDirectBinningBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_35getDensProfsEllDirectBinningBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_34getDensProfsEllDirectBinningBase}, + {"getDensProfsKernelBasedBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_37getDensProfsKernelBasedBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_36getDensProfsKernelBasedBase}, + {"getObjInfoBase", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_10CosmicBase_39getObjInfoBase, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_10CosmicBase_38getObjInfoBase}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_6common_15profile_classes_10CosmicBase_41__reduce_cython__, METH_NOARGS, __pyx_doc_6common_15profile_classes_10CosmicBase_40__reduce_cython__}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_6common_15profile_classes_10CosmicBase_43__setstate_cython__, METH_O, __pyx_doc_6common_15profile_classes_10CosmicBase_42__setstate_cython__}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_6common_15profile_classes_CosmicBase = { + PyVarObject_HEAD_INIT(0, 0) + "common.profile_classes.CosmicBase", /*tp_name*/ + sizeof(struct __pyx_obj_6common_15profile_classes_CosmicBase), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_6common_15profile_classes_CosmicBase, /*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, /*tp_flags*/ + "CosmicBase(unicode SNAP, float L_BOX, int MIN_NUMBER_PTCS, unicode CENTER)\n Parent class governing high-level cosmic shape calculations\n \n Its public methods are ``getR200s()``, ``getMassesCentersBase()``, \n ``getShapeCatLocalBase()``, ``getShapeCatGlobalBase()``, ``getShapeCatVelLocalBase()``, \n ``getShapeCatVelGlobalBase()``, ``dumpShapeCatLocalBase()``, ``dumpShapeCatGlobalBase()``, \n ``dumpShapeCatVelLocalBase()``, ``dumpShapeCatVelGlobalBase()``, ``plotShapeProfsBase()``,\n ``plotLocalTHistBase()``, ``plotGlobalTHistBase()``, ``getDensProfsBestFitsBase()``,\n ``getConcentrationsBase()``, ``getDensProfsSphDirectBinningBase()``, ``getDensProfsEllDirectBinningBase()``,\n ``getDensProfsKernelBasedBase()``, ``getObjInfoBase()``", /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_6common_15profile_classes_CosmicBase, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_6common_15profile_classes_10CosmicBase_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_6common_15profile_classes_CosmicBase, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyObject *__pyx_tp_new_6common_15profile_classes_DensProfs(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_obj_6common_15profile_classes_DensProfs *p; + PyObject *o = __pyx_tp_new_6common_15profile_classes_CosmicBase(t, a, k); + if (unlikely(!o)) return 0; + p = ((struct __pyx_obj_6common_15profile_classes_DensProfs *)o); + p->idx_cat = Py_None; Py_INCREF(Py_None); + p->xyz.data = NULL; + p->xyz.memview = NULL; + p->masses.data = NULL; + p->masses.memview = NULL; + return o; +} + +static void __pyx_tp_dealloc_6common_15profile_classes_DensProfs(PyObject *o) { + struct __pyx_obj_6common_15profile_classes_DensProfs *p = (struct __pyx_obj_6common_15profile_classes_DensProfs *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->idx_cat); + __PYX_XDEC_MEMVIEW(&p->xyz, 1); + __PYX_XDEC_MEMVIEW(&p->masses, 1); + #if CYTHON_USE_TYPE_SLOTS + if (PyType_IS_GC(Py_TYPE(o)->tp_base)) + #endif + PyObject_GC_Track(o); + __pyx_tp_dealloc_6common_15profile_classes_CosmicBase(o); +} + +static int __pyx_tp_traverse_6common_15profile_classes_DensProfs(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_6common_15profile_classes_DensProfs *p = (struct __pyx_obj_6common_15profile_classes_DensProfs *)o; + e = ((likely(__pyx_ptype_6common_15profile_classes_CosmicBase)) ? ((__pyx_ptype_6common_15profile_classes_CosmicBase->tp_traverse) ? __pyx_ptype_6common_15profile_classes_CosmicBase->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_6common_15profile_classes_DensProfs)); if (e) return e; + if (p->idx_cat) { + e = (*v)(p->idx_cat, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_6common_15profile_classes_DensProfs(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_6common_15profile_classes_DensProfs *p = (struct __pyx_obj_6common_15profile_classes_DensProfs *)o; + if (likely(__pyx_ptype_6common_15profile_classes_CosmicBase)) { if (__pyx_ptype_6common_15profile_classes_CosmicBase->tp_clear) __pyx_ptype_6common_15profile_classes_CosmicBase->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_6common_15profile_classes_DensProfs); + tmp = ((PyObject*)p->idx_cat); + p->idx_cat = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_6common_15profile_classes_DensProfs[] = { + {"getIdxCat", (PyCFunction)__pyx_pw_6common_15profile_classes_9DensProfs_3getIdxCat, METH_NOARGS, __pyx_doc_6common_15profile_classes_9DensProfs_2getIdxCat}, + {"getIdxCatSuffRes", (PyCFunction)__pyx_pw_6common_15profile_classes_9DensProfs_5getIdxCatSuffRes, METH_NOARGS, __pyx_doc_6common_15profile_classes_9DensProfs_4getIdxCatSuffRes}, + {"getMassesCenters", (PyCFunction)__pyx_pw_6common_15profile_classes_9DensProfs_7getMassesCenters, METH_NOARGS, __pyx_doc_6common_15profile_classes_9DensProfs_6getMassesCenters}, + {"getDensProfsDirectBinning", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_9DensProfs_9getDensProfsDirectBinning, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_9DensProfs_8getDensProfsDirectBinning}, + {"getDensProfsKernelBased", (PyCFunction)__pyx_pw_6common_15profile_classes_9DensProfs_11getDensProfsKernelBased, METH_O, __pyx_doc_6common_15profile_classes_9DensProfs_10getDensProfsKernelBased}, + {"getDensProfsBestFits", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_9DensProfs_13getDensProfsBestFits, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_9DensProfs_12getDensProfsBestFits}, + {"getConcentrations", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_9DensProfs_15getConcentrations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_9DensProfs_14getConcentrations}, + {"plotDensProfs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_9DensProfs_17plotDensProfs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_9DensProfs_16plotDensProfs}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_6common_15profile_classes_9DensProfs_19__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_6common_15profile_classes_9DensProfs_21__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_6common_15profile_classes_DensProfs = { + PyVarObject_HEAD_INIT(0, 0) + "common.profile_classes.DensProfs", /*tp_name*/ + sizeof(struct __pyx_obj_6common_15profile_classes_DensProfs), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_6common_15profile_classes_DensProfs, /*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*/ + " Class for density profile calculations\n \n Its public methods are ``getIdxCat()``, ``getIdxCatSuffRes()``,\n ``getMassesCenters()``, ``getDensProfsDirectBinning()``,\n ``getDensProfsKernelBased()``, ``getDensProfsBestFits()``, ``getConcentrations()``, \n ``plotDensProfs()``.", /*tp_doc*/ + __pyx_tp_traverse_6common_15profile_classes_DensProfs, /*tp_traverse*/ + __pyx_tp_clear_6common_15profile_classes_DensProfs, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_6common_15profile_classes_DensProfs, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_6common_15profile_classes_9DensProfs_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_6common_15profile_classes_DensProfs, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyObject *__pyx_tp_new_6common_15profile_classes_DensShapeProfs(PyTypeObject *t, PyObject *a, PyObject *k) { + PyObject *o = __pyx_tp_new_6common_15profile_classes_DensProfs(t, a, k); + if (unlikely(!o)) return 0; + return o; +} + +static PyMethodDef __pyx_methods_6common_15profile_classes_DensShapeProfs[] = { + {"getDensProfsDirectBinning", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_3getDensProfsDirectBinning, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_2getDensProfsDirectBinning}, + {"getShapeCatLocal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_5getShapeCatLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_4getShapeCatLocal}, + {"getShapeCatGlobal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_7getShapeCatGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_6getShapeCatGlobal}, + {"vizLocalShapes", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_9vizLocalShapes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_8vizLocalShapes}, + {"vizGlobalShapes", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_11vizGlobalShapes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_10vizGlobalShapes}, + {"plotGlobalEpsHist", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_13plotGlobalEpsHist, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_12plotGlobalEpsHist}, + {"plotLocalEpsHist", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_15plotLocalEpsHist, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_14plotLocalEpsHist}, + {"plotLocalTHist", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_17plotLocalTHist, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_16plotLocalTHist}, + {"plotGlobalTHist", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_19plotGlobalTHist, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_18plotGlobalTHist}, + {"plotShapeProfs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_21plotShapeProfs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_20plotShapeProfs}, + {"dumpShapeCatLocal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_23dumpShapeCatLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_22dumpShapeCatLocal}, + {"dumpShapeCatGlobal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_14DensShapeProfs_25dumpShapeCatGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_24dumpShapeCatGlobal}, + {"getObjInfo", (PyCFunction)__pyx_pw_6common_15profile_classes_14DensShapeProfs_27getObjInfo, METH_NOARGS, __pyx_doc_6common_15profile_classes_14DensShapeProfs_26getObjInfo}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_6common_15profile_classes_14DensShapeProfs_29__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_6common_15profile_classes_14DensShapeProfs_31__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_6common_15profile_classes_DensShapeProfs = { + PyVarObject_HEAD_INIT(0, 0) + "common.profile_classes.DensShapeProfs", /*tp_name*/ + sizeof(struct __pyx_obj_6common_15profile_classes_DensShapeProfs), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_6common_15profile_classes_DensProfs, /*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*/ + " Class for density profile and shape profile calculations\n \n Its public methods are ``getShapeCatLocal()``, ``getShapeCatGlobal()``, \n ``vizLocalShapes()``, ``vizGlobalShapes()``, ``plotGlobalEpsHist()``, \n ``plotLocalEpsHist()``, ``plotGlobalTHist()``, ``plotLocalTHist()``, \n ``dumpShapeCatLocal()``, ``dumpShapeCatGlobal()``, ``getObjInfo()``.", /*tp_doc*/ + __pyx_tp_traverse_6common_15profile_classes_DensProfs, /*tp_traverse*/ + __pyx_tp_clear_6common_15profile_classes_DensProfs, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_6common_15profile_classes_DensShapeProfs, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_6common_15profile_classes_14DensShapeProfs_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_6common_15profile_classes_DensShapeProfs, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyObject *__pyx_tp_new_6common_15profile_classes_DensProfsHDF5(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *p; + PyObject *o = __pyx_tp_new_6common_15profile_classes_CosmicBase(t, a, k); + if (unlikely(!o)) return 0; + p = ((struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)o); + p->HDF5_SNAP_DEST = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->HDF5_GROUP_DEST = ((PyObject*)Py_None); Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_6common_15profile_classes_DensProfsHDF5(PyObject *o) { + struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *p = (struct __pyx_obj_6common_15profile_classes_DensProfsHDF5 *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + Py_CLEAR(p->HDF5_SNAP_DEST); + Py_CLEAR(p->HDF5_GROUP_DEST); + __pyx_tp_dealloc_6common_15profile_classes_CosmicBase(o); +} + +static PyMethodDef __pyx_methods_6common_15profile_classes_DensProfsHDF5[] = { + {"getXYZMasses", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_13DensProfsHDF5_3getXYZMasses, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_13DensProfsHDF5_2getXYZMasses}, + {"getVelXYZ", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_13DensProfsHDF5_5getVelXYZ, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_13DensProfsHDF5_4getVelXYZ}, + {"getIdxCat", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_13DensProfsHDF5_7getIdxCat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_13DensProfsHDF5_6getIdxCat}, + {"getMassesCenters", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_13DensProfsHDF5_9getMassesCenters, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_13DensProfsHDF5_8getMassesCenters}, + {"getDensProfsDirectBinning", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_13DensProfsHDF5_11getDensProfsDirectBinning, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_13DensProfsHDF5_10getDensProfsDirectBinning}, + {"getDensProfsKernelBased", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_13DensProfsHDF5_13getDensProfsKernelBased, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_13DensProfsHDF5_12getDensProfsKernelBased}, + {"getDensProfsBestFits", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_13DensProfsHDF5_15getDensProfsBestFits, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_13DensProfsHDF5_14getDensProfsBestFits}, + {"getConcentrations", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_13DensProfsHDF5_17getConcentrations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_13DensProfsHDF5_16getConcentrations}, + {"plotDensProfs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_13DensProfsHDF5_19plotDensProfs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_13DensProfsHDF5_18plotDensProfs}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_6common_15profile_classes_13DensProfsHDF5_21__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_6common_15profile_classes_13DensProfsHDF5_23__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_6common_15profile_classes_DensProfsHDF5 = { + PyVarObject_HEAD_INIT(0, 0) + "common.profile_classes.DensProfsHDF5", /*tp_name*/ + sizeof(struct __pyx_obj_6common_15profile_classes_DensProfsHDF5), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_6common_15profile_classes_DensProfsHDF5, /*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, /*tp_flags*/ + " Class for density profile calculations for Gadget-style HDF5 data\n \n Its public methods are ``getXYZMasses()``, ``getVelXYZ()``, \n ``getIdxCat()``, ``getMassesCenters()``, \n ``getDensProfsDirectBinning()``, ``getDensProfsKernelBased()``, \n ``getDensProfsBestFits()``, ``getConcentrations()``,\n ``plotDensProfs()``.", /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_6common_15profile_classes_DensProfsHDF5, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_6common_15profile_classes_13DensProfsHDF5_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_6common_15profile_classes_DensProfsHDF5, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyObject *__pyx_tp_new_6common_15profile_classes_DensShapeProfsHDF5(PyTypeObject *t, PyObject *a, PyObject *k) { + PyObject *o = __pyx_tp_new_6common_15profile_classes_DensProfsHDF5(t, a, k); + if (unlikely(!o)) return 0; + return o; +} + +static PyMethodDef __pyx_methods_6common_15profile_classes_DensShapeProfsHDF5[] = { + {"getDensProfsDirectBinning", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_3getDensProfsDirectBinning, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_2getDensProfsDirectBinning}, + {"getShapeCatLocal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_5getShapeCatLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_4getShapeCatLocal}, + {"getShapeCatGlobal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_7getShapeCatGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_6getShapeCatGlobal}, + {"getShapeCatVelLocal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_9getShapeCatVelLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_8getShapeCatVelLocal}, + {"getShapeCatVelGlobal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_11getShapeCatVelGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_10getShapeCatVelGlobal}, + {"vizLocalShapes", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_13vizLocalShapes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_12vizLocalShapes}, + {"vizGlobalShapes", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_15vizGlobalShapes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_14vizGlobalShapes}, + {"plotGlobalEpsHist", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_17plotGlobalEpsHist, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_16plotGlobalEpsHist}, + {"plotLocalEpsHist", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_19plotLocalEpsHist, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_18plotLocalEpsHist}, + {"plotLocalTHist", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_21plotLocalTHist, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_20plotLocalTHist}, + {"plotGlobalTHist", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_23plotGlobalTHist, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_22plotGlobalTHist}, + {"plotShapeProfs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_25plotShapeProfs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_24plotShapeProfs}, + {"dumpShapeCatLocal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_27dumpShapeCatLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_26dumpShapeCatLocal}, + {"dumpShapeCatGlobal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_29dumpShapeCatGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_28dumpShapeCatGlobal}, + {"dumpShapeVelCatLocal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_31dumpShapeVelCatLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_30dumpShapeVelCatLocal}, + {"dumpShapeVelCatGlobal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_33dumpShapeVelCatGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_32dumpShapeVelCatGlobal}, + {"getObjInfo", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_35getObjInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5_34getObjInfo}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_37__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_39__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_6common_15profile_classes_DensShapeProfsHDF5 = { + PyVarObject_HEAD_INIT(0, 0) + "common.profile_classes.DensShapeProfsHDF5", /*tp_name*/ + sizeof(struct __pyx_obj_6common_15profile_classes_DensShapeProfsHDF5), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_6common_15profile_classes_DensProfsHDF5, /*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, /*tp_flags*/ + " Class for density profile and shape profile calculations for Gadget-style HDF5 data\n \n Its public methods are ``getShapeCatLocal()``, ``getShapeCatGlobal()``, \n ``vizLocalShapes()``, ``vizGlobalShapes()``, ``plotGlobalEpsHist()``, ``plotLocalEpsHist()``.\n ``plotGlobalTHist()``, ``plotLocalTHist()``, ``dumpShapeCatLocal()``,\n ``dumpShapeCatGlobal()``, ``dumpShapeCatVelLocal()``, ``dumpShapeCatVelGlobal()``,\n ``getObjInfo()``.", /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_6common_15profile_classes_DensShapeProfsHDF5, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_6common_15profile_classes_18DensShapeProfsHDF5_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_6common_15profile_classes_DensShapeProfsHDF5, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct_array __pyx_vtable_array; + +static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_array_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_array_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_array; + p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_format = ((PyObject*)Py_None); Py_INCREF(Py_None); + if (unlikely(__pyx_array___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_array(PyObject *o) { + struct __pyx_array_obj *p = (struct __pyx_array_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_array___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->mode); + Py_CLEAR(p->_format); + (*Py_TYPE(o)->tp_free)(o); +} +static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_array___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) { + PyObject *v = __Pyx_PyObject_GenericGetAttr(o, n); + if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + v = __pyx_array___getattr__(o, n); + } + return v; +} + +static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(o); +} + +static PyMethodDef __pyx_methods_array[] = { + {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_array[] = { + {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_array = { + __pyx_array___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_array, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_array = { + __pyx_array___len__, /*mp_length*/ + __pyx_array___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_array, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_array = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_array_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_array = { + PyVarObject_HEAD_INIT(0, 0) + "common.profile_classes.array", /*tp_name*/ + sizeof(struct __pyx_array_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_array, /*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*/ + &__pyx_tp_as_sequence_array, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_array, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + __pyx_tp_getattro_array, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_array, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_array, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_array, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_array, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_MemviewEnum_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_MemviewEnum_obj *)o); + p->name = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_Enum(PyObject *o) { + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->name); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + if (p->name) { + e = (*v)(p->name, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_Enum(PyObject *o) { + PyObject* tmp; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + tmp = ((PyObject*)p->name); + p->name = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_Enum[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_MemviewEnum = { + PyVarObject_HEAD_INIT(0, 0) + "common.profile_classes.Enum", /*tp_name*/ + sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_Enum, /*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 + __pyx_MemviewEnum___repr__, /*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*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_Enum, /*tp_traverse*/ + __pyx_tp_clear_Enum, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_Enum, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_MemviewEnum___init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_Enum, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview; + +static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryview_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryview_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_memoryview; + p->obj = Py_None; Py_INCREF(Py_None); + p->_size = Py_None; Py_INCREF(Py_None); + p->_array_interface = Py_None; Py_INCREF(Py_None); + p->view.obj = NULL; + if (unlikely(__pyx_memoryview___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_memoryview(PyObject *o) { + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryview___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->obj); + Py_CLEAR(p->_size); + Py_CLEAR(p->_array_interface); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + if (p->obj) { + e = (*v)(p->obj, a); if (e) return e; + } + if (p->_size) { + e = (*v)(p->_size, a); if (e) return e; + } + if (p->_array_interface) { + e = (*v)(p->_array_interface, a); if (e) return e; + } + if (p->view.obj) { + e = (*v)(p->view.obj, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_memoryview(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + tmp = ((PyObject*)p->obj); + p->obj = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_size); + p->_size = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_array_interface); + p->_array_interface = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + Py_CLEAR(p->view.obj); + return 0; +} +static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_memoryview___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o); +} + +static PyMethodDef __pyx_methods_memoryview[] = { + {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0}, + {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0}, + {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0}, + {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_memoryview[] = { + {(char *)"T", __pyx_getprop___pyx_memoryview_T, 0, (char *)0, 0}, + {(char *)"base", __pyx_getprop___pyx_memoryview_base, 0, (char *)0, 0}, + {(char *)"shape", __pyx_getprop___pyx_memoryview_shape, 0, (char *)0, 0}, + {(char *)"strides", __pyx_getprop___pyx_memoryview_strides, 0, (char *)0, 0}, + {(char *)"suboffsets", __pyx_getprop___pyx_memoryview_suboffsets, 0, (char *)0, 0}, + {(char *)"ndim", __pyx_getprop___pyx_memoryview_ndim, 0, (char *)0, 0}, + {(char *)"itemsize", __pyx_getprop___pyx_memoryview_itemsize, 0, (char *)0, 0}, + {(char *)"nbytes", __pyx_getprop___pyx_memoryview_nbytes, 0, (char *)0, 0}, + {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_memoryview = { + __pyx_memoryview___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_memoryview, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_memoryview = { + __pyx_memoryview___len__, /*mp_length*/ + __pyx_memoryview___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_memoryview, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_memoryview = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_memoryview_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_memoryview = { + PyVarObject_HEAD_INIT(0, 0) + "common.profile_classes.memoryview", /*tp_name*/ + sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_memoryview, /*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 + __pyx_memoryview___repr__, /*tp_repr*/ + 0, /*tp_as_number*/ + &__pyx_tp_as_sequence_memoryview, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_memoryview, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + __pyx_memoryview___str__, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_memoryview, /*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*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_memoryview, /*tp_traverse*/ + __pyx_tp_clear_memoryview, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_memoryview, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_memoryview, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_memoryview, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice; + +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryviewslice_obj *p; + PyObject *o = __pyx_tp_new_memoryview(t, a, k); + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryviewslice_obj *)o); + p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice; + p->from_object = Py_None; Py_INCREF(Py_None); + p->from_slice.memview = NULL; + return o; +} + +static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryviewslice___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->from_object); + PyObject_GC_Track(o); + __pyx_tp_dealloc_memoryview(o); +} + +static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + e = __pyx_tp_traverse_memoryview(o, v, a); if (e) return e; + if (p->from_object) { + e = (*v)(p->from_object, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear__memoryviewslice(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + __pyx_tp_clear_memoryview(o); + tmp = ((PyObject*)p->from_object); + p->from_object = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + __PYX_XDEC_MEMVIEW(&p->from_slice, 1); + return 0; +} + +static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o); +} + +static PyMethodDef __pyx_methods__memoryviewslice[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = { + {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_memoryviewslice = { + PyVarObject_HEAD_INIT(0, 0) + "common.profile_classes._memoryviewslice", /*tp_name*/ + sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc__memoryviewslice, /*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 + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___repr__, /*tp_repr*/ + #else + 0, /*tp_repr*/ + #endif + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___str__, /*tp_str*/ + #else + 0, /*tp_str*/ + #endif + 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*/ + "Internal class for passing memoryview slices to Python", /*tp_doc*/ + __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/ + __pyx_tp_clear__memoryviewslice, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods__memoryviewslice, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets__memoryviewslice, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new__memoryviewslice, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_profile_classes(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_profile_classes}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "profile_classes", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_, __pyx_k_, sizeof(__pyx_k_), 0, 1, 0, 0}, + {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 1}, + {&__pyx_n_s_Axes3D, __pyx_k_Axes3D, sizeof(__pyx_k_Axes3D), 0, 0, 1, 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_s_CAT_DEST, __pyx_k_CAT_DEST, sizeof(__pyx_k_CAT_DEST), 0, 0, 1, 1}, + {&__pyx_n_s_CENTER, __pyx_k_CENTER, sizeof(__pyx_k_CENTER), 0, 0, 1, 1}, + {&__pyx_n_s_COMM_WORLD, __pyx_k_COMM_WORLD, sizeof(__pyx_k_COMM_WORLD), 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_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0}, + {&__pyx_n_s_CosmicBase, __pyx_k_CosmicBase, sizeof(__pyx_k_CosmicBase), 0, 0, 1, 1}, + {&__pyx_n_s_D_BINS, __pyx_k_D_BINS, sizeof(__pyx_k_D_BINS), 0, 0, 1, 1}, + {&__pyx_n_s_D_LOGEND, __pyx_k_D_LOGEND, sizeof(__pyx_k_D_LOGEND), 0, 0, 1, 1}, + {&__pyx_n_s_D_LOGSTART, __pyx_k_D_LOGSTART, sizeof(__pyx_k_D_LOGSTART), 0, 0, 1, 1}, + {&__pyx_n_s_DensProfs, __pyx_k_DensProfs, sizeof(__pyx_k_DensProfs), 0, 0, 1, 1}, + {&__pyx_n_s_DensProfsHDF5, __pyx_k_DensProfsHDF5, sizeof(__pyx_k_DensProfsHDF5), 0, 0, 1, 1}, + {&__pyx_n_s_DensShapeProfs, __pyx_k_DensShapeProfs, sizeof(__pyx_k_DensShapeProfs), 0, 0, 1, 1}, + {&__pyx_n_s_DensShapeProfsHDF5, __pyx_k_DensShapeProfsHDF5, sizeof(__pyx_k_DensShapeProfsHDF5), 0, 0, 1, 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_s_FontProperties, __pyx_k_FontProperties, sizeof(__pyx_k_FontProperties), 0, 0, 1, 1}, + {&__pyx_n_s_Get_rank, __pyx_k_Get_rank, sizeof(__pyx_k_Get_rank), 0, 0, 1, 1}, + {&__pyx_n_s_Get_size, __pyx_k_Get_size, sizeof(__pyx_k_Get_size), 0, 0, 1, 1}, + {&__pyx_n_s_HDF5_GROUP_DEST, __pyx_k_HDF5_GROUP_DEST, sizeof(__pyx_k_HDF5_GROUP_DEST), 0, 0, 1, 1}, + {&__pyx_n_s_HDF5_SNAP_DEST, __pyx_k_HDF5_SNAP_DEST, sizeof(__pyx_k_HDF5_SNAP_DEST), 0, 0, 1, 1}, + {&__pyx_n_s_HIST_NB_BINS, __pyx_k_HIST_NB_BINS, sizeof(__pyx_k_HIST_NB_BINS), 0, 0, 1, 1}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0x00, __pyx_k_Incompatible_checksums_s_vs_0x00, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x00), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0x2f, __pyx_k_Incompatible_checksums_s_vs_0x2f, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x2f), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0x80, __pyx_k_Incompatible_checksums_s_vs_0x80, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x80), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_k_Incompatible_checksums_s_vs_0xb0, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb0), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0xbd, __pyx_k_Incompatible_checksums_s_vs_0xbd, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xbd), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0xc6, __pyx_k_Incompatible_checksums_s_vs_0xc6, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xc6), 0, 0, 1, 0}, + {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, + {&__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_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0}, + {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0}, + {&__pyx_n_s_L_BOX, __pyx_k_L_BOX, sizeof(__pyx_k_L_BOX), 0, 0, 1, 1}, + {&__pyx_n_s_MIN_NUMBER_PTCS, __pyx_k_MIN_NUMBER_PTCS, sizeof(__pyx_k_MIN_NUMBER_PTCS), 0, 0, 1, 1}, + {&__pyx_n_s_MIN_NUMBER_STAR_PTCS, __pyx_k_MIN_NUMBER_STAR_PTCS, sizeof(__pyx_k_MIN_NUMBER_STAR_PTCS), 0, 0, 1, 1}, + {&__pyx_n_s_MPI, __pyx_k_MPI, sizeof(__pyx_k_MPI), 0, 0, 1, 1}, + {&__pyx_n_s_M_TOL, __pyx_k_M_TOL, sizeof(__pyx_k_M_TOL), 0, 0, 1, 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_s_N_MIN, __pyx_k_N_MIN, sizeof(__pyx_k_N_MIN), 0, 0, 1, 1}, + {&__pyx_n_s_N_WALL, __pyx_k_N_WALL, sizeof(__pyx_k_N_WALL), 0, 0, 1, 1}, + {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, + {&__pyx_kp_s_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, 0, 1, 0}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_ROverR200, __pyx_k_ROverR200, sizeof(__pyx_k_ROverR200), 0, 0, 1, 1}, + {&__pyx_n_s_ROverR200_fit, __pyx_k_ROverR200_fit, sizeof(__pyx_k_ROverR200_fit), 0, 0, 1, 1}, + {&__pyx_n_s_SNAP, __pyx_k_SNAP, sizeof(__pyx_k_SNAP), 0, 0, 1, 1}, + {&__pyx_n_s_SNAP_MAX, __pyx_k_SNAP_MAX, sizeof(__pyx_k_SNAP_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 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_s_VIZ_DEST, __pyx_k_VIZ_DEST, sizeof(__pyx_k_VIZ_DEST), 0, 0, 1, 1}, + {&__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_n_s_WANT_RVIR, __pyx_k_WANT_RVIR, sizeof(__pyx_k_WANT_RVIR), 0, 0, 1, 1}, + {&__pyx_n_s__20, __pyx_k__20, sizeof(__pyx_k__20), 0, 0, 1, 1}, + {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1}, + {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_b, __pyx_k_b, sizeof(__pyx_k_b), 0, 0, 1, 1}, + {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, + {&__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_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_comm, __pyx_k_comm, sizeof(__pyx_k_comm), 0, 0, 1, 1}, + {&__pyx_n_s_common_profile_classes, __pyx_k_common_profile_classes, sizeof(__pyx_k_common_profile_classes), 0, 0, 1, 1}, + {&__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_default_rng, __pyx_k_default_rng, sizeof(__pyx_k_default_rng), 0, 0, 1, 1}, + {&__pyx_n_s_dens_profs, __pyx_k_dens_profs, sizeof(__pyx_k_dens_profs), 0, 0, 1, 1}, + {&__pyx_n_s_dens_profs_fit, __pyx_k_dens_profs_fit, sizeof(__pyx_k_dens_profs_fit), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_n_u_dm, __pyx_k_dm, sizeof(__pyx_k_dm), 0, 1, 0, 1}, + {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1}, + {&__pyx_n_u_einasto, __pyx_k_einasto, sizeof(__pyx_k_einasto), 0, 1, 0, 1}, + {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 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_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, + {&__pyx_kp_u_font_size, __pyx_k_font_size, sizeof(__pyx_k_font_size), 0, 1, 0, 0}, + {&__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_frac_r200, __pyx_k_frac_r200, sizeof(__pyx_k_frac_r200), 0, 0, 1, 1}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_idx_cat, __pyx_k_idx_cat, sizeof(__pyx_k_idx_cat), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, + {&__pyx_n_s_inter, __pyx_k_inter, sizeof(__pyx_k_inter), 0, 0, 1, 1}, + {&__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_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_major, __pyx_k_major, sizeof(__pyx_k_major), 0, 0, 1, 1}, + {&__pyx_n_s_masses, __pyx_k_masses, sizeof(__pyx_k_masses), 0, 0, 1, 1}, + {&__pyx_n_s_matplotlib, __pyx_k_matplotlib, sizeof(__pyx_k_matplotlib), 0, 0, 1, 1}, + {&__pyx_n_s_matplotlib_font_manager, __pyx_k_matplotlib_font_manager, sizeof(__pyx_k_matplotlib_font_manager), 0, 0, 1, 1}, + {&__pyx_n_s_matplotlib_pyplot, __pyx_k_matplotlib_pyplot, sizeof(__pyx_k_matplotlib_pyplot), 0, 0, 1, 1}, + {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, + {&__pyx_n_s_method, __pyx_k_method, sizeof(__pyx_k_method), 0, 0, 1, 1}, + {&__pyx_n_s_minor, __pyx_k_minor, sizeof(__pyx_k_minor), 0, 0, 1, 1}, + {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, + {&__pyx_n_s_mpi4py, __pyx_k_mpi4py, sizeof(__pyx_k_mpi4py), 0, 0, 1, 1}, + {&__pyx_n_s_mpl_toolkits_mplot3d, __pyx_k_mpl_toolkits_mplot3d, sizeof(__pyx_k_mpl_toolkits_mplot3d), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 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_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_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_n_s_numpy_random, __pyx_k_numpy_random, sizeof(__pyx_k_numpy_random), 0, 0, 1, 1}, + {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, + {&__pyx_n_s_obj_numbers, __pyx_k_obj_numbers, sizeof(__pyx_k_obj_numbers), 0, 0, 1, 1}, + {&__pyx_n_s_obj_type, __pyx_k_obj_type, sizeof(__pyx_k_obj_type), 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_plt, __pyx_k_plt, sizeof(__pyx_k_plt), 0, 0, 1, 1}, + {&__pyx_n_s_pyplot, __pyx_k_pyplot, sizeof(__pyx_k_pyplot), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__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_CosmicBase, __pyx_k_pyx_unpickle_CosmicBase, sizeof(__pyx_k_pyx_unpickle_CosmicBase), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_DensProfs, __pyx_k_pyx_unpickle_DensProfs, sizeof(__pyx_k_pyx_unpickle_DensProfs), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_DensProfsHDF5, __pyx_k_pyx_unpickle_DensProfsHDF5, sizeof(__pyx_k_pyx_unpickle_DensProfsHDF5), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_DensShapeProfs, __pyx_k_pyx_unpickle_DensShapeProfs, sizeof(__pyx_k_pyx_unpickle_DensShapeProfs), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_DensShapeProfsHDF, __pyx_k_pyx_unpickle_DensShapeProfsHDF, sizeof(__pyx_k_pyx_unpickle_DensShapeProfsHDF), 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_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_r200, __pyx_k_r200, sizeof(__pyx_k_r200), 0, 0, 1, 1}, + {&__pyx_n_s_r200s, __pyx_k_r200s, sizeof(__pyx_k_r200s), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_rank, __pyx_k_rank, sizeof(__pyx_k_rank), 0, 0, 1, 1}, + {&__pyx_n_s_rcParams, __pyx_k_rcParams, sizeof(__pyx_k_rcParams), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__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_reduced, __pyx_k_reduced, sizeof(__pyx_k_reduced), 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_shell_based, __pyx_k_shell_based, sizeof(__pyx_k_shell_based), 0, 0, 1, 1}, + {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, + {&__pyx_n_s_spherical, __pyx_k_spherical, sizeof(__pyx_k_spherical), 0, 0, 1, 1}, + {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 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}, + {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, + {&__pyx_n_s_suffix, __pyx_k_suffix, sizeof(__pyx_k_suffix), 0, 0, 1, 1}, + {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_time, __pyx_k_time, sizeof(__pyx_k_time), 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_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_velxyz, __pyx_k_velxyz, sizeof(__pyx_k_velxyz), 0, 0, 1, 1}, + {&__pyx_n_s_xyz, __pyx_k_xyz, sizeof(__pyx_k_xyz), 0, 0, 1, 1}, + {&__pyx_kp_u_xyz_shape_0_must_be_equal_to_mas, __pyx_k_xyz_shape_0_must_be_equal_to_mas, sizeof(__pyx_k_xyz_shape_0_must_be_equal_to_mas), 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_super = __Pyx_GetBuiltinName(__pyx_n_s_super); if (!__pyx_builtin_super) __PYX_ERR(0, 623, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 133, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 148, __pyx_L1_error) + __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 151, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(1, 180, __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_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(1, 404, __pyx_L1_error) + __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(1, 613, __pyx_L1_error) + __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(1, 832, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(1, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(1, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_GIVEREF(__pyx_tuple__12); + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __pyx_tuple__13 = PyTuple_New(1); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_INCREF(__pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_int_neg_1); + PyTuple_SET_ITEM(__pyx_tuple__13, 0, __pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_tuple__13); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__15); + __Pyx_GIVEREF(__pyx_tuple__15); + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_slice__16 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__16)) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__16); + __Pyx_GIVEREF(__pyx_slice__16); + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__18); + __Pyx_GIVEREF(__pyx_tuple__18); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__19); + __Pyx_GIVEREF(__pyx_tuple__19); + + /* "(tree fragment)":1 + * def __pyx_unpickle_CosmicBase(__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, 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_CosmicBase, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_tuple__23 = 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__23)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 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_stringsource, __pyx_n_s_pyx_unpickle_DensProfs, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_tuple__25 = 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__25)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); + __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 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_stringsource, __pyx_n_s_pyx_unpickle_DensShapeProfs, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_tuple__27 = 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__27)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 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_stringsource, __pyx_n_s_pyx_unpickle_DensProfsHDF5, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_tuple__29 = 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__29)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__29); + __Pyx_GIVEREF(__pyx_tuple__29); + __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_DensShapeProfsHDF, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(1, 1, __pyx_L1_error) + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(1, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(1, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(1, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__33); + __Pyx_GIVEREF(__pyx_tuple__33); + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(1, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__34); + __Pyx_GIVEREF(__pyx_tuple__34); + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(1, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__36 = 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__36)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__36); + __Pyx_GIVEREF(__pyx_tuple__36); + __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_13 = PyInt_FromLong(13); if (unlikely(!__pyx_int_13)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_584347 = PyInt_FromLong(584347L); if (unlikely(!__pyx_int_584347)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_50022093 = PyInt_FromLong(50022093L); if (unlikely(!__pyx_int_50022093)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_134991579 = PyInt_FromLong(134991579L); if (unlikely(!__pyx_int_134991579)) __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_198986527 = PyInt_FromLong(198986527L); if (unlikely(!__pyx_int_198986527)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_208529318 = PyInt_FromLong(208529318L); if (unlikely(!__pyx_int_208529318)) __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:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + generic = Py_None; Py_INCREF(Py_None); + strided = Py_None; Py_INCREF(Py_None); + indirect = Py_None; Py_INCREF(Py_None); + contiguous = Py_None; Py_INCREF(Py_None); + indirect_contiguous = Py_None; Py_INCREF(Py_None); + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + if (PyType_Ready(&__pyx_type_6common_15profile_classes_CosmicBase) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_6common_15profile_classes_CosmicBase.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6common_15profile_classes_CosmicBase.tp_dictoffset && __pyx_type_6common_15profile_classes_CosmicBase.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_6common_15profile_classes_CosmicBase.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #if CYTHON_COMPILING_IN_CPYTHON + { + PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_6common_15profile_classes_CosmicBase, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 21, __pyx_L1_error) + if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) { + __pyx_wrapperbase_6common_15profile_classes_10CosmicBase___init__ = *((PyWrapperDescrObject *)wrapper)->d_base; + __pyx_wrapperbase_6common_15profile_classes_10CosmicBase___init__.doc = __pyx_doc_6common_15profile_classes_10CosmicBase___init__; + ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6common_15profile_classes_10CosmicBase___init__; + } + } + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CosmicBase, (PyObject *)&__pyx_type_6common_15profile_classes_CosmicBase) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6common_15profile_classes_CosmicBase) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + __pyx_ptype_6common_15profile_classes_CosmicBase = &__pyx_type_6common_15profile_classes_CosmicBase; + __pyx_type_6common_15profile_classes_DensProfs.tp_base = __pyx_ptype_6common_15profile_classes_CosmicBase; + if (PyType_Ready(&__pyx_type_6common_15profile_classes_DensProfs) < 0) __PYX_ERR(0, 592, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_6common_15profile_classes_DensProfs.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6common_15profile_classes_DensProfs.tp_dictoffset && __pyx_type_6common_15profile_classes_DensProfs.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_6common_15profile_classes_DensProfs.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #if CYTHON_COMPILING_IN_CPYTHON + { + PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_6common_15profile_classes_DensProfs, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 592, __pyx_L1_error) + if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) { + __pyx_wrapperbase_6common_15profile_classes_9DensProfs___init__ = *((PyWrapperDescrObject *)wrapper)->d_base; + __pyx_wrapperbase_6common_15profile_classes_9DensProfs___init__.doc = __pyx_doc_6common_15profile_classes_9DensProfs___init__; + ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6common_15profile_classes_9DensProfs___init__; + } + } + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DensProfs, (PyObject *)&__pyx_type_6common_15profile_classes_DensProfs) < 0) __PYX_ERR(0, 592, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6common_15profile_classes_DensProfs) < 0) __PYX_ERR(0, 592, __pyx_L1_error) + __pyx_ptype_6common_15profile_classes_DensProfs = &__pyx_type_6common_15profile_classes_DensProfs; + __pyx_type_6common_15profile_classes_DensShapeProfs.tp_base = __pyx_ptype_6common_15profile_classes_DensProfs; + if (PyType_Ready(&__pyx_type_6common_15profile_classes_DensShapeProfs) < 0) __PYX_ERR(0, 717, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_6common_15profile_classes_DensShapeProfs.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6common_15profile_classes_DensShapeProfs.tp_dictoffset && __pyx_type_6common_15profile_classes_DensShapeProfs.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_6common_15profile_classes_DensShapeProfs.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #if CYTHON_COMPILING_IN_CPYTHON + { + PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_6common_15profile_classes_DensShapeProfs, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 717, __pyx_L1_error) + if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) { + __pyx_wrapperbase_6common_15profile_classes_14DensShapeProfs___init__ = *((PyWrapperDescrObject *)wrapper)->d_base; + __pyx_wrapperbase_6common_15profile_classes_14DensShapeProfs___init__.doc = __pyx_doc_6common_15profile_classes_14DensShapeProfs___init__; + ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6common_15profile_classes_14DensShapeProfs___init__; + } + } + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DensShapeProfs, (PyObject *)&__pyx_type_6common_15profile_classes_DensShapeProfs) < 0) __PYX_ERR(0, 717, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6common_15profile_classes_DensShapeProfs) < 0) __PYX_ERR(0, 717, __pyx_L1_error) + __pyx_ptype_6common_15profile_classes_DensShapeProfs = &__pyx_type_6common_15profile_classes_DensShapeProfs; + __pyx_type_6common_15profile_classes_DensProfsHDF5.tp_base = __pyx_ptype_6common_15profile_classes_CosmicBase; + if (PyType_Ready(&__pyx_type_6common_15profile_classes_DensProfsHDF5) < 0) __PYX_ERR(0, 918, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_6common_15profile_classes_DensProfsHDF5.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6common_15profile_classes_DensProfsHDF5.tp_dictoffset && __pyx_type_6common_15profile_classes_DensProfsHDF5.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_6common_15profile_classes_DensProfsHDF5.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #if CYTHON_COMPILING_IN_CPYTHON + { + PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_6common_15profile_classes_DensProfsHDF5, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 918, __pyx_L1_error) + if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) { + __pyx_wrapperbase_6common_15profile_classes_13DensProfsHDF5___init__ = *((PyWrapperDescrObject *)wrapper)->d_base; + __pyx_wrapperbase_6common_15profile_classes_13DensProfsHDF5___init__.doc = __pyx_doc_6common_15profile_classes_13DensProfsHDF5___init__; + ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6common_15profile_classes_13DensProfsHDF5___init__; + } + } + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DensProfsHDF5, (PyObject *)&__pyx_type_6common_15profile_classes_DensProfsHDF5) < 0) __PYX_ERR(0, 918, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6common_15profile_classes_DensProfsHDF5) < 0) __PYX_ERR(0, 918, __pyx_L1_error) + __pyx_ptype_6common_15profile_classes_DensProfsHDF5 = &__pyx_type_6common_15profile_classes_DensProfsHDF5; + __pyx_type_6common_15profile_classes_DensShapeProfsHDF5.tp_base = __pyx_ptype_6common_15profile_classes_DensProfsHDF5; + if (PyType_Ready(&__pyx_type_6common_15profile_classes_DensShapeProfsHDF5) < 0) __PYX_ERR(0, 1075, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_6common_15profile_classes_DensShapeProfsHDF5.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6common_15profile_classes_DensShapeProfsHDF5.tp_dictoffset && __pyx_type_6common_15profile_classes_DensShapeProfsHDF5.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_6common_15profile_classes_DensShapeProfsHDF5.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #if CYTHON_COMPILING_IN_CPYTHON + { + PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_6common_15profile_classes_DensShapeProfsHDF5, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1075, __pyx_L1_error) + if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) { + __pyx_wrapperbase_6common_15profile_classes_18DensShapeProfsHDF5___init__ = *((PyWrapperDescrObject *)wrapper)->d_base; + __pyx_wrapperbase_6common_15profile_classes_18DensShapeProfsHDF5___init__.doc = __pyx_doc_6common_15profile_classes_18DensShapeProfsHDF5___init__; + ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6common_15profile_classes_18DensShapeProfsHDF5___init__; + } + } + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DensShapeProfsHDF5, (PyObject *)&__pyx_type_6common_15profile_classes_DensShapeProfsHDF5) < 0) __PYX_ERR(0, 1075, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_6common_15profile_classes_DensShapeProfsHDF5) < 0) __PYX_ERR(0, 1075, __pyx_L1_error) + __pyx_ptype_6common_15profile_classes_DensShapeProfsHDF5 = &__pyx_type_6common_15profile_classes_DensShapeProfsHDF5; + __pyx_vtabptr_array = &__pyx_vtable_array; + __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview; + if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_array.tp_print = 0; + #endif + if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + __pyx_array_type = &__pyx_type___pyx_array; + if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_MemviewEnum.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error) + __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum; + __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview; + __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer; + __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice; + __pyx_vtable_memoryview.setitem_slice_assignment = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_slice_assignment; + __pyx_vtable_memoryview.setitem_slice_assign_scalar = (PyObject *(*)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_setitem_slice_assign_scalar; + __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed; + __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object; + __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object; + if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryview.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + __pyx_memoryview_type = &__pyx_type___pyx_memoryview; + __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice; + __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview; + __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object; + __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object; + __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type; + if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryviewslice.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initprofile_classes(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initprofile_classes(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_profile_classes(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_profile_classes(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_profile_classes(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + static PyThread_type_lock __pyx_t_4[8]; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'profile_classes' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_profile_classes(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("profile_classes", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_common__profile_classes) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "common.profile_classes")) { + if (unlikely(PyDict_SetItemString(modules, "common.profile_classes", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "common/profile_classes.pyx":5 + * # -*- coding: utf-8 -*- + * + * import numpy as np # <<<<<<<<<<<<<< + * import matplotlib.pyplot as plt + * from mpl_toolkits.mplot3d import Axes3D + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "common/profile_classes.pyx":6 + * + * import numpy as np + * import matplotlib.pyplot as plt # <<<<<<<<<<<<<< + * from mpl_toolkits.mplot3d import Axes3D + * from matplotlib import pyplot + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s__20); + __Pyx_GIVEREF(__pyx_n_s__20); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s__20); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_matplotlib_pyplot, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_plt, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "common/profile_classes.pyx":7 + * import numpy as np + * import matplotlib.pyplot as plt + * from mpl_toolkits.mplot3d import Axes3D # <<<<<<<<<<<<<< + * from matplotlib import pyplot + * from numpy.random import default_rng + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_Axes3D); + __Pyx_GIVEREF(__pyx_n_s_Axes3D); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Axes3D); + __pyx_t_1 = __Pyx_Import(__pyx_n_s_mpl_toolkits_mplot3d, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Axes3D); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Axes3D, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "common/profile_classes.pyx":8 + * import matplotlib.pyplot as plt + * from mpl_toolkits.mplot3d import Axes3D + * from matplotlib import pyplot # <<<<<<<<<<<<<< + * from numpy.random import default_rng + * from matplotlib.font_manager import FontProperties + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_pyplot); + __Pyx_GIVEREF(__pyx_n_s_pyplot); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_pyplot); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_matplotlib, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_pyplot); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyplot, __pyx_t_1) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "common/profile_classes.pyx":9 + * from mpl_toolkits.mplot3d import Axes3D + * from matplotlib import pyplot + * from numpy.random import default_rng # <<<<<<<<<<<<<< + * from matplotlib.font_manager import FontProperties + * import matplotlib + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_default_rng); + __Pyx_GIVEREF(__pyx_n_s_default_rng); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_default_rng); + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy_random, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_default_rng); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_rng, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "common/profile_classes.pyx":10 + * from matplotlib import pyplot + * from numpy.random import default_rng + * from matplotlib.font_manager import FontProperties # <<<<<<<<<<<<<< + * import matplotlib + * matplotlib.rcParams.update({'font.size': 13}) + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_FontProperties); + __Pyx_GIVEREF(__pyx_n_s_FontProperties); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_FontProperties); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_matplotlib_font_manager, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_FontProperties); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FontProperties, __pyx_t_1) < 0) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "common/profile_classes.pyx":11 + * from numpy.random import default_rng + * from matplotlib.font_manager import FontProperties + * import matplotlib # <<<<<<<<<<<<<< + * matplotlib.rcParams.update({'font.size': 13}) + * cimport cython + */ + __pyx_t_2 = __Pyx_Import(__pyx_n_s_matplotlib, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_matplotlib, __pyx_t_2) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "common/profile_classes.pyx":12 + * from matplotlib.font_manager import FontProperties + * import matplotlib + * matplotlib.rcParams.update({'font.size': 13}) # <<<<<<<<<<<<<< + * cimport cython + * import time + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_matplotlib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rcParams); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_update); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_font_size, __pyx_int_13) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "common/profile_classes.pyx":14 + * matplotlib.rcParams.update({'font.size': 13}) + * cimport cython + * import time # <<<<<<<<<<<<<< + * from mpi4py import MPI + * comm = MPI.COMM_WORLD + */ + __pyx_t_3 = __Pyx_Import(__pyx_n_s_time, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_time, __pyx_t_3) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "common/profile_classes.pyx":15 + * cimport cython + * import time + * from mpi4py import MPI # <<<<<<<<<<<<<< + * comm = MPI.COMM_WORLD + * rank = comm.Get_rank() + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_MPI); + __Pyx_GIVEREF(__pyx_n_s_MPI); + PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_MPI); + __pyx_t_1 = __Pyx_Import(__pyx_n_s_mpi4py, __pyx_t_3, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_MPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_MPI, __pyx_t_3) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "common/profile_classes.pyx":16 + * import time + * from mpi4py import MPI + * comm = MPI.COMM_WORLD # <<<<<<<<<<<<<< + * rank = comm.Get_rank() + * size = comm.Get_size() + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COMM_WORLD); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_comm, __pyx_t_3) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "common/profile_classes.pyx":17 + * from mpi4py import MPI + * comm = MPI.COMM_WORLD + * rank = comm.Get_rank() # <<<<<<<<<<<<<< + * size = comm.Get_size() + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_comm); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Get_rank); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rank, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "common/profile_classes.pyx":18 + * comm = MPI.COMM_WORLD + * rank = comm.Get_rank() + * size = comm.Get_size() # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_comm); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Get_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_size, __pyx_t_3) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_CosmicBase(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6common_15profile_classes_1__pyx_unpickle_CosmicBase, NULL, __pyx_n_s_common_profile_classes); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_CosmicBase, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":11 + * __pyx_unpickle_CosmicBase__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_CosmicBase__set_state(CosmicBase __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.L_BOX = __pyx_state[1]; __pyx_result.MASS_UNIT = __pyx_state[2]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[3]; __pyx_result.SAFE = __pyx_state[4]; __pyx_result.SNAP = __pyx_state[5]; __pyx_result.r200 = __pyx_state[6]; __pyx_result.start_time = __pyx_state[7] + * if len(__pyx_state) > 8 and hasattr(__pyx_result, '__dict__'): + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6common_15profile_classes_3__pyx_unpickle_DensProfs, NULL, __pyx_n_s_common_profile_classes); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_DensProfs, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_DensShapeProfs(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6common_15profile_classes_5__pyx_unpickle_DensShapeProfs, NULL, __pyx_n_s_common_profile_classes); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_DensShapeProfs, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":11 + * __pyx_unpickle_DensShapeProfs__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_DensShapeProfs__set_state(DensShapeProfs __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.CENTER = __pyx_state[0]; __pyx_result.D_BINS = __pyx_state[1]; __pyx_result.D_LOGEND = __pyx_state[2]; __pyx_result.D_LOGSTART = __pyx_state[3]; __pyx_result.L_BOX = __pyx_state[4]; __pyx_result.MASS_UNIT = __pyx_state[5]; __pyx_result.MIN_NUMBER_PTCS = __pyx_state[6]; __pyx_result.M_TOL = __pyx_state[7]; __pyx_result.N_MIN = __pyx_state[8]; __pyx_result.N_WALL = __pyx_state[9]; __pyx_result.SAFE = __pyx_state[10]; __pyx_result.SNAP = __pyx_state[11]; __pyx_result.idx_cat = __pyx_state[12]; __pyx_result.masses = __pyx_state[13]; __pyx_result.r200 = __pyx_state[14]; __pyx_result.start_time = __pyx_state[15]; __pyx_result.xyz = __pyx_state[16] + * if len(__pyx_state) > 17 and hasattr(__pyx_result, '__dict__'): + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6common_15profile_classes_7__pyx_unpickle_DensProfsHDF5, NULL, __pyx_n_s_common_profile_classes); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_DensProfsHDF5, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_DensShapeProfsHDF5(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6common_15profile_classes_9__pyx_unpickle_DensShapeProfsHDF5, NULL, __pyx_n_s_common_profile_classes); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_DensShapeProfsHDF, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "common/profile_classes.pyx":1 + * #cython: language_level=3 # <<<<<<<<<<<<<< + * #!/usr/bin/env python3 + * # -*- coding: utf-8 -*- + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":209 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * def __dealloc__(array self): + */ + __pyx_t_3 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_3) < 0) __PYX_ERR(1, 209, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyType_Modified(__pyx_array_type); + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XGOTREF(generic); + __Pyx_DECREF_SET(generic, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XGOTREF(strided); + __Pyx_DECREF_SET(strided, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XGOTREF(indirect); + __Pyx_DECREF_SET(indirect, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XGOTREF(contiguous); + __Pyx_DECREF_SET(contiguous, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XGOTREF(indirect_contiguous); + __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":316 + * + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<< + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ + * PyThread_allocate_lock(), + */ + __pyx_memoryview_thread_locks_used = 0; + + /* "View.MemoryView":317 + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<< + * PyThread_allocate_lock(), + * PyThread_allocate_lock(), + */ + __pyx_t_4[0] = PyThread_allocate_lock(); + __pyx_t_4[1] = PyThread_allocate_lock(); + __pyx_t_4[2] = PyThread_allocate_lock(); + __pyx_t_4[3] = PyThread_allocate_lock(); + __pyx_t_4[4] = PyThread_allocate_lock(); + __pyx_t_4[5] = PyThread_allocate_lock(); + __pyx_t_4[6] = PyThread_allocate_lock(); + __pyx_t_4[7] = PyThread_allocate_lock(); + memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_4, sizeof(__pyx_memoryview_thread_locks[0]) * (8)); + + /* "View.MemoryView":549 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_3) < 0) __PYX_ERR(1, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyType_Modified(__pyx_memoryview_type); + + /* "View.MemoryView":995 + * return self.from_object + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 995, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_3) < 0) __PYX_ERR(1, 995, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyType_Modified(__pyx_memoryviewslice_type); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init common.profile_classes", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init common.profile_classes"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); + return 0; +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallNoArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, NULL, 0); + } +#endif +#ifdef __Pyx_CyFunction_USED + if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) +#else + if (likely(PyCFunction_Check(func))) +#endif + { + if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { + return __Pyx_PyObject_CallMethO(func, NULL); + } + } + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); +} +#endif + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* 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]; +#ifdef 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 *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 *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) +{ + int first_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) + return; + if (unlikely(__pyx_get_slice_count(memview) < 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + first_time = __pyx_add_acquisition_count(memview) == 0; + if (unlikely(first_time)) { + if (have_gil) { + Py_INCREF((PyObject *) memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_INCREF((PyObject *) memview); + PyGILState_Release(_gilstate); + } + } +} +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice, + int have_gil, int lineno) { + int last_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + memslice->memview = NULL; + return; + } + if (unlikely(__pyx_get_slice_count(memview) <= 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + last_time = __pyx_sub_acquisition_count(memview) == 1; + memslice->data = NULL; + if (unlikely(last_time)) { + if (have_gil) { + Py_CLEAR(memslice->memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_CLEAR(memslice->memview); + PyGILState_Release(_gilstate); + } + } else { + memslice->memview = NULL; + } +} + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; icurexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; + if (unlikely(PyTuple_Check(err))) + return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r = __Pyx_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +} + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (!j) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; + if (likely(m && m->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { + Py_ssize_t l = m->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return m->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* 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 (unlikely(!r)) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* None */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { + Py_ssize_t q = a / b; + Py_ssize_t r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { + PyObject *runerr; + Py_ssize_t key_value; + PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; + if (unlikely(!(m && m->sq_item))) { + PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); + return NULL; + } + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { + PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; + if (likely(m && m->mp_subscript)) { + return m->mp_subscript(obj, key); + } + return __Pyx_PyObject_GetIndex(obj, key); +} +#endif + +/* decode_c_string */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, 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)) { + Py_ssize_t length; + if (unlikely((start < 0) | (stop < 0))) { + size_t slen = strlen(cstring); + if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, + "c-string too long to convert to Python"); + return NULL; + } + length = (Py_ssize_t) slen; + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + 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); + } +} + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* ExtTypeTest */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_type == NULL || exc_info->exc_type == 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 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + #endif + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + 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 + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type, *local_value, *local_tb; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #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 = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + 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 + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 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 + const digit* digits = ((PyLongObject*)op1)->ob_digit; + const Py_ssize_t size = Py_SIZE(op1); + if (likely(__Pyx_sst_abs(size) <= 1)) { + a = likely(size) ? digits[0] : 0; + if (size == -1) a = -a; + } else { + 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; + double a = PyFloat_AS_DOUBLE(op1); + 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 + +/* None */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +} + +/* None */ +static CYTHON_INLINE long __Pyx_div_long(long a, long b) { + long q = a / b; + long r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* CallNextTpTraverse */ +static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse) { + PyTypeObject* type = Py_TYPE(obj); + while (type && type->tp_traverse != current_tp_traverse) + type = type->tp_base; + while (type && type->tp_traverse == current_tp_traverse) + type = type->tp_base; + if (type && type->tp_traverse) + return type->tp_traverse(obj, v, a); + return 0; +} + +/* CallNextTpClear */ +static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear) { + PyTypeObject* type = Py_TYPE(obj); + while (type && type->tp_clear != current_tp_clear) + type = type->tp_base; + while (type && type->tp_clear == current_tp_clear) + type = type->tp_base; + if (type && type->tp_clear) + type->tp_clear(obj); +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, attr_name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(attr_name)); +#endif + 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 + +/* PyObjectGetAttrStrNoError */ +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +} + +/* SetupReduce */ +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStr(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_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#else + if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#endif +#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 + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#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; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#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_GetAttrStr(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()) + PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} + +/* SetVTable */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable) { +#if PY_VERSION_HEX >= 0x02070000 + PyObject *ob = PyCapsule_New(vtable, 0, 0); +#else + PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); +#endif + if (!ob) + goto bad; + if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) + goto bad; + Py_DECREF(ob); + return 0; +bad: + Py_XDECREF(ob); + return -1; +} + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + 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); + PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_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 ((0)) {} + view->obj = NULL; + Py_DECREF(obj); +} +#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]; + } + 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); + } + } + *out_start = start; + *out_end = end + itemsize; +} +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); +} + +/* Capsule */ +static CYTHON_INLINE PyObject * +__pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig) +{ + PyObject *cobj; +#if PY_VERSION_HEX >= 0x02070000 + cobj = PyCapsule_New(p, sig, NULL); +#else + cobj = PyCObject_FromVoidPtr(p, NULL); +#endif + return cobj; +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); + } +} + +/* 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;\ + } + +/* MemviewDtypeToObject */ +static CYTHON_INLINE PyObject *__pyx_memview_get_float(const char *itemp) { + return (PyObject *) PyFloat_FromDouble(*(float *) itemp); +} +static CYTHON_INLINE int __pyx_memview_set_float(const char *itemp, PyObject *obj) { + float value = __pyx_PyFloat_AsFloat(obj); + if ((value == (float)-1) && PyErr_Occurred()) + return 0; + *(float *) itemp = value; + return 1; +} + +/* IsLittleEndian */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void) +{ + union { + uint32_t u32; + uint8_t u8[4]; + } S; + S.u32 = 0x01020304; + return S.u8[0] == 4; +} + +/* BufferFormatCheck */ +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + ctx->is_valid_array = 0; + ctx->struct_alignment = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t <= '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} +static int __Pyx_BufFmt_ExpectNumber(const char **ts) { + int number = __Pyx_BufFmt_ParseNumber(ts); + if (number == -1) + PyErr_Format(PyExc_ValueError,\ + "Does not understand character buffer dtype format string ('%c')", **ts); + return number; +} +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case '?': return "'bool'"; + case 'c': return "'char'"; + case 'b': return "'signed char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 's': case 'p': return "a string"; + case 0: return "end"; + default: return "unparseable format string"; + } +} +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +/* These are for computing the padding at the end of the struct to align + on the first member of the struct. This will probably the same as above, + but we don't have any guarantees. + */ +typedef struct { short x; char c; } __Pyx_pad_short; +typedef struct { int x; char c; } __Pyx_pad_int; +typedef struct { long x; char c; } __Pyx_pad_long; +typedef struct { float x; char c; } __Pyx_pad_float; +typedef struct { double x; char c; } __Pyx_pad_double; +typedef struct { long double x; char c; } __Pyx_pad_longdouble; +typedef struct { void *x; char c; } __Pyx_pad_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); + case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); + case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': + return 'H'; + case 'b': case 'h': case 'i': + case 'l': case 'q': case 's': case 'p': + return 'I'; + case '?': case 'B': case 'H': case 'I': case 'L': case 'Q': + return 'U'; + case 'f': case 'd': case 'g': + return (is_complex ? 'C' : 'R'); + case 'O': + return 'O'; + case 'P': + return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset, arraysize = 1; + if (ctx->enc_type == 0) return 0; + if (ctx->head->field->type->arraysize[0]) { + int i, ndim = 0; + if (ctx->enc_type == 's' || ctx->enc_type == 'p') { + ctx->is_valid_array = ctx->head->field->type->ndim == 1; + ndim = 1; + if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %zu", + ctx->head->field->type->arraysize[0], ctx->enc_count); + return -1; + } + } + if (!ctx->is_valid_array) { + PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", + ctx->head->field->type->ndim, ndim); + return -1; + } + for (i = 0; i < ctx->head->field->type->ndim; i++) { + arraysize *= ctx->head->field->type->arraysize[i]; + } + ctx->is_valid_array = 0; + ctx->enc_count = 1; + } + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + if (ctx->struct_alignment == 0) + ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, + ctx->is_complex); + } + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + if ((type->typegroup == 'H' || group == 'H') && type->size == size) { + } else { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + } + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + ctx->fmt_offset += size; + if (arraysize) + ctx->fmt_offset += (arraysize - 1) * size; + --ctx->enc_count; + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} +static PyObject * +__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) +{ + const char *ts = *tsp; + int i = 0, number, ndim; + ++ts; + if (ctx->new_count != 1) { + PyErr_SetString(PyExc_ValueError, + "Cannot handle repeated arrays in format string"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ndim = ctx->head->field->type->ndim; + while (*ts && *ts != ')') { + switch (*ts) { + case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; + default: break; + } + number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) + return PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + if (*ts != ',' && *ts != ')') + return PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + if (*ts == ',') ts++; + i++; + } + if (i != ndim) + return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return NULL; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return Py_None; +} +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case '\r': + case '\n': + ++ts; + break; + case '<': + if (!__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + size_t struct_alignment = ctx->struct_alignment; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + ctx->enc_count = 0; + ctx->struct_alignment = 0; + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + if (struct_alignment) ctx->struct_alignment = struct_alignment; + } + break; + case '}': + { + size_t alignment = ctx->struct_alignment; + ++ts; + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + if (alignment && ctx->fmt_offset % alignment) { + ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); + } + } + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } + CYTHON_FALLTHROUGH; + case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': case 'p': + if ((ctx->enc_type == *ts) && (got_Z == ctx->is_complex) && + (ctx->enc_packmode == ctx->new_packmode) && (!ctx->is_valid_array)) { + ctx->enc_count += ctx->new_count; + ctx->new_count = 1; + got_Z = 0; + ++ts; + break; + } + CYTHON_FALLTHROUGH; + case 's': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + case '(': + if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; + } + } + } +} + +/* 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; + } + } + if (a->ndim) { + for (i = 0; i < a->ndim; i++) + if (a->arraysize[i] != b->arraysize[i]) + return 0; + } + 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; + } + } + 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; + } + } + 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; + } + } + return 1; +fail: + return 0; +} +static int +__pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec) +{ + 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; + } + } + 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; + } + } + 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]; + } + } 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]; + } + } + 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 (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_float(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; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_float, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_float(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), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 2, + &__Pyx_TypeInfo_float, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(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), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 3, + &__Pyx_TypeInfo_float, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* 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; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) { + const char neg_one = (char) ((char) 0 - (char) 1), const_zero = (char) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(char) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (char) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (char) 0; + case 1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0]) + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) { + return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) { + return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) >= 4 * PyLong_SHIFT) { + return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (char) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(char) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (char) 0; + case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(char, digit, +digits[0]) + case -2: + if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + } +#endif + if (sizeof(char) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + char val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (char) -1; + } + } else { + char val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (char) -1; + val = __Pyx_PyInt_As_char(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to char"); + return (char) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to char"); + return (char) -1; +} + +/* CheckBinaryVersion */ + static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + return PyErr_WarnEx(NULL, message, 1); + } + return 0; +} + +/* InitStrings */ + static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/cosmic_profiles/for_docs/common/profile_classes.so b/cosmic_profiles/for_docs/common/profile_classes.so new file mode 100755 index 0000000000000000000000000000000000000000..38dc74fd2b8cf7f5ee4a9b1e557c46bfedd3abbc GIT binary patch literal 3437136 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 z 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

j9-+I0lzYlF%>h@s##g?wOL7E z=2&DW=pzPxGNEoVkN@2`8C>*4v-{^n`@aYfcOl;fc=LAVJlZ zCyjTF1wi0qDM0!d^SPZ;2C2P5V*%w1Pop>76I`zTXUo$V1C=2 zMJxj1RhE&8fWZyLBKRU4P|N`F)q)oo{8B7ZH?1Qr<~lBhV;3>yyf4ma7XdQ$RDFX) z*88<vK6klt?dS1bVHftEo5(qmN!y@;GZFpn#T<>Li*#WTcjiw7ukfE=XAk2D>Hvtj35aYQ97>?Q0W8eny;WWXP^ zmTl5~#2v*~uMsR?!Mk0Sv99!fn%~=0pLf*rPyA;U(LvXKN`uF z0I_jxHFGECtvKd77G8>D<;9XpaZG(ImJ~-|#4@PmXTc9^9>ozDv6^Z5*@TE6P#nWt zTf4AMQ92eXugsPk%#O@QN(aocKn^1SlWolofnRF&CKm$$3EGt#F!mwb013U73>c>( zWPn8DN(OwfnU9bGqJ>I^CbBUlZ386ERx;qR>SHbJ7W{LW9A`VDE1f znF@LKn{#gQDe;f8tvlc}O`fwZ)8xx++EKX!6E>*~fOESA=Gkv{#`$Tr<0x@ruQxi5 zX`Q3c%^XL$`gHttVL7y+$1`u|dW1iWWo=yZy1I;SPEQ=N+Hsbzq;A?YI?lEM*9Hd) z-^`Jg%YeVLdqa*fOI>NuU_OzCPUsps%m7zGlY*necqc@E%~(Fp@8crS}0Mpqn|k z>&7lj8b{hbKgZ0v2~eIgo;+lKlM|-uD+29~Maglt!cop)Y!5YYEZ0g*Y@VmQIZ7kB z^CT!hPDI5|_(}xjhfY3oAb-9Fodu`@ev0!973VoNy*oOoR!(F3gAPR6w6(UPUbfpv zYLC`hZ;%G18Iv^+Phj^(JDRvA9&*nCGCE>cesBa8ijV#avsAK+o&+B6w+5uLbJTjg zDYWbZ0HWKq@fUtDV+Sesk#L1Yo;TW^;PyQ)@o?u}UZ`up`tqtOlusS&BF>(C93?Im zx5wYfXzlhKGXiFaya(WLip&6{S$yPW*n{KnDbHgs4z1{@1K%8+J-pO+~{cOai~u|eu9B>(A;X3FKKMs7s4 zABNIzRK{^s2Ep^De**+wM_Mr{pGu)4%`@Uv*Yqzu(GjjMiGIFJLQ>NlZYv4)>fJ+* zq`90V*gxDoe7FV0kFsarK^gBJn+a&yW;bh{EB%dxoUA z)g;)n_6)yZ=k4FLr(i{rq;7k=u&NZSNRrgu5>_Nh>Xd{PN#4zzE|xDGM3P)-I?axh z1uMEkiXC{tiXUVTojMYwD{!evurflVe#Q3g1uGgwirxLd zfqPDGOSB>#QtbK%T5dgXNEm7(#Sx)kMIT6=W}6>^75S3lApn$%C(34&l{+(>cO5cqQ1a7Ch((ImwgM4w=Xr=Jfo*cK92xq~;U$`sWvC z7D6i)z!@=z>VlPVBgKKbU_~GNd1;{Kv~=DMIRY)Iy$LIA;Iy5C5up`Hl42uSu+lP8 zoQ?=qG?f$^%z_mw0n%wKmOhHjUoXp0W@EOiHrXOJK|*4Q8oi7xfAaAqGfg=csj`sl2oe5bduGweW)( z0Yx5a!xa{JUT8}CS4Y+J5{II}i8I51O(g@QhC}((u`c4&n)O?@BLRNXxaAr__bKMD z^1j^PaQL)5k5HQsGtUD@Xvy-0^nqCBq5XL~=1n6B|MEP7Kt>_YV_ctSBb4VI4ok;& zxhTrhdD)mR30d-m=ejK!(bF!ALv)jcpIFvp8K}jKtVaL6Aig1?Br(Su9SC z>GIkeI6cFV@T@HsYgA=to8DX8@YeKT(1A$1=_RBKLocG*VzFMfn@Xvwm-TiV>RQ=u zqpBsF=Iv$%A54oyz@#MmyaXy=eb1Stl3moRZAZg)Zz?-StxrsgML;aHHq^ooX6zm3 z3kJBtBF_s=N&o7S&GQNqy5|zGsbqjuD=42j)0E8g83OC3&V9=2BL$br-5kSMQJlBk@yoT6<7|cFY=z^v5B=O|IU z@3f$NpT{oOJUji=tLLXU&#?AM*y$O#@vJY`$mLn%)%3pOhPS2%gDym(fMt(54q~-z zHR1>t)MbdsQgtbV22ed`fU`_>Fq>n3Gqz@|tPg8eRgDsMiKQ4f_ zNN#@8=N7q^Uh5{0@3i84pB3l3tT^9e#rX~^&iA+F=enyn-&@7`&MMCLb;ctk?MGP4 z9SVJIPuSc39%(1#*x#Ue`mwQ#SYV4}Jh8zRi4|gUEs_z%=vrhcT^RAKINx4F1;1uC z-Iw;2tbW^aUmh*L_^pAad7ov{R+$n?PXC`>-5f-RQ4sZ-ZyFIDtf^DKM`JP%Ro2%u zTpW8ue4&31kh^3R$plWPTA6cW*#$t#w%?k$*z%LlD|!`F0_O;0@q{pfM>l_|?fbr6 zklPkpHwSn}Lv3oFJ~O@JLZ#0CHnnH)H0Bs1Rxtz9K$+z({$%j&L*LRoFXyf>zr9Hv z$7OW@-z&8nkZR>}9JM_zQWf{*`f+d}UU^bR6`+>MSMCt{rt9PjC7L4b0i?^j7gJ%L=O>6f&rcM2-W6`b$n%&u*vrWC zz;To2}^D-DOH$w9~aNG-pA88_-yo}eYLDzRJv|xT& z=4R}XhBmZ|*#^Cvyw?!?*`c`WiT&{wfq1xs{!Rh5%v0Jh*|QWw6gf<;m;^Z-^gT;_ z`)^w?5pN9>>PB`eOqS2BKg zvg9aBN}JIW$Jq+Ua=ACIji*&Oo>t*_S`nAkIm)J$Z=#@lpU3V_mR(+Z1E*);#S89s+aAiQc`WD-flx(E8A^UwPe%0+LZRq z_LQY4AbKooJ}-eW%Rrc=l3mm*G=zCLm7Sy3Vf;qk93by{)rMO5!R!Opt323*D=hN7 z(3JGAIv&qUT%Wvo;JE~BDj6Wv3d*OBbrGk$Ts;1*17+TZy}WA6VkqwmxYaC>c;R#- zERcASlMTeYZwG3D#Hi+Vp(iYq@;q=XmRRhNz9kk<{cf+Rn}Ujlu6EJHf-7*a4Rkbd z^3r!$GVz+X_=T}AePeCB&@Hs<@_M)5k`TUfuitM*2v&k@tc(|=1D4cwI~Nk{Dqojo zNyAe(OqMocF+siu>N*C#>h0;(>cjFC=#99D(O3X4$#4Bg_~M;FEuzt)&5`!03_PqZ zPO#7PGcG3=FT9Um#FQLoD;#Gl9LFtUN{**jIG$eNc>0({jOQq^t?#s;{7e307crh) zzgc?&r)S{Cv%ZKSm#5aL13L28`%yQ%H9Z(~AriJ;Lb_n_BC0K7G~6xAc2gmtsPZ(Idt8f@l&Z7|8V zfmpKSy#cqHWefq;Mq0*T8+qSuiDe99p0@)nVmXuNfn!O-5{Hku-V#e3{Sw!Hzr&?k zwz{QFbzy^UPQF_e7B-{bt-{jy`jmK(Rep==KrL2oGFQw~S~gjLh)IYX4&d2JeF1`h z;rmL`hC}9SOB->ip{@_V^s{;&}l*WuYpyT8sSS#WtZ39z|C9W z#lo^oCSn3QCnm%x~%2Fy~)F6tE;!gm8x**R)G(td+X+6Kti>S{wR{9wjM2=f3C zuCU1SLQ~Sey43Kz#M#SI!*dDPR5C!S6_igM>mtq$OAR|S;gh2*Eb{(z$n1FkoJnSiI@gR3H6S=Nx+o<4{=xj@zWk>p99 znid2Y)jjvOAb5_I!3$}ikB0MW?TYgsuN}W2C^@E|SWFyeD;&oy2uhA;R@!)Gh2xoH z76hK7#EHJsg7SSHyCCrF`pw!KxOofQc-9vLw;FCh*7 zy@>RcJoVi0;5C9TQ)rMO5!HkJ255(XKi##thCH<=l0?#Xi{+>&~rjh|tjiP+&SQl}I z*J^NB*K7{Em+FuRA^0}F;&?-Xucp@=SK#0|iU2)BL3w@^F>43^#te_<$pDol%NL~f zcQ;H~xA7%Eq`=$Ubxw2jdEAL)mt%F(|h_w!ekjoO&+DL1i z{{DXWBpmJK>zW)^oph_7u);w{51$|V!11tSAg)h-uwf&tS`NRTlGwN_5$^*;OUC}> z!$v%WQ0vCFUu!?)Bh#Q){>scaHITp7T~z+*_osPdwvt;%&CG1uR?lf@*^Tz&LQ~DN zZx{?oU1UEWG-#fE;*i8Y*sll)>6QHbI@M@V zw-P>aNP6>eA>wO^N$~SG5R>NTa9Uy#{3=dp9Vve4rX?joWFe#?Oz)LqN8WC?h~677 zcq%z5wp$~)KX{E9oW!yT8>;o2Ds2n>o=W7wCJO;f;Njg?B5UinjgxE86duDeA+P}!OPR3dETW>{H92J;x}cQnE1`$x}#N1{ALgc&T`^6Gv`UH zNi3MHM6cgHtgMLyTLvIo1zS!Hip{EO!EyEJwy3X7alS6a`I>55s#@8{+)rt4Z=TZ3 z-1US#4?W?enIGOMvOdXTAeZf1PWsKp^<6Qpp94gAGH=~5pf|U-ANXyNbcZ@yB%FEb z#^K$qQG|6}`&}z5tEbN6LmSSr`uVX$*_{KVNwRujB(92I-CaA1&w2dYIg_2q2 zQ$F(19oMpa?+6xDp6Agsp4tk}OC|OELcao*ay)g7=gZ5jGMa!KDi_W42MRvCB{-!| z*;6-NSsh$!>wwxuY`yGkrEGatR4;qqO4<7sc3UeeM+Lsgl>?yZYHz#MIxx zO3dcUlKb0U_irpH<91_{-y>!tJvTIPtJz%l3;Ud(U&-frem$S(`DJ~c$LgLHd!7f5 zbvw8I@q36dFT?tlrEH$Zf|eC(p2s4UwP>Elij*~Gp66GZw2_4-Yq`9PU(w}xI84@R zc^){HZPZ1Yg;`!k6(#?Z4Rq0)F~1w0YuSq1=IU~r2HiUpe+%2|x=cOm^7=A5%~SY} zeIo!pXX8j{H}o$eV_&Ruq`mUuFP6n_k6_2%yT{Vl?h)E`xlrS+RQRrP8{6BZa5x~p zMy!^FU9kZy6N^{J%3LEGFRfL&f4Xl~kKLfA9qc`~yFnz_dJelmq}X~6o3*6adJeRt z*m@4Mq}W0Uw4}OiMEl98ZLpt(S|rmC+sW&)x$NyWZUA7&Z2GoMAn`^Er`gmc&8BZl zOoAO>h)FXgw#3YZZ11*65=@XmzTR|Wld)xXcLO;oX3|LRjXh>y{mid{kGJ=>g&03u zyO9S7=HbA@+jb;p3TAgVkdtB)HxnP#9{Qr$MrNpZd&O>fy2wiM`-+uMZoS$34_vTGa__hq{% z@GX1FrXU~{_2sqzow=tSA}h|v{1CRL#F$WW!c$E+0r2DWzVXVJ*zOLT3OlT^i3YK z?^(9ETdgx&Dao_G?@2DtepB|K>3!SDyr!CiE=1|>ZN6oLV(8PhZ;sm@+z(rUxjuqh z&Gw)VesX?(ftBa6&SKjm&jUAZn~x#R%iL%hiigYdh)nQwc^#jS~hGLqK)%*qfPvp zZ10d7ChYfj55Htr*?uNoNYjlnQZG+f*@hv7Mhjng*u!1va^-4<-A-kdv>Ml*~PqED=U+* zZ*pZ`))~EQakpBhXDG?DHZRwx${sYmT~6k;p&4`_3g?lG+>>sT&Lh2d&{1XHV85#t zZ3PaVqqNU66qM&z>4m!D=UQiJo&?rq$?@lrHD_vugg@9<}o1)UkL_C zp^t)Hm+2XuWG`L#uJYw{AJPhkgMOCQeIiE7IIa?>=m)amC#Td=roWZW(8ipaQ6C3l zVSkVm2Vw{OcnmjraL%_-<)pNF{T%m6Oc~E3KyaEAWJC&Y8_8LNag-D@K(IIqe7vSd za#SC;9LT*|M{<^Glbv3B_op;I9pz*#0h*YQ$YJdJM`MqOCnnS%astcq&^w9kWunWm>D&}s)~8r+vg7L0t$$ye;(T3-^ED~X*Q4nd+GY=Z+TJ`l zzY-4X+uI9LF1yB2agQ^u&#J6R2Mx8Q z8Qk?9wVz9;rudX=nbb<0*lU&mQ$rR2|IOMcRAt*12>IA#6e=c{OXHc^5+c3+F^3Wd@^e1E557^z< z1xnL93)EMvK@U|jN_EYtl?*t_AEYLSJu6?SoC?p-06NldE}8Lqra0df`_-^=3&2jL z*x6@GD0c+l*cS5JM11%=FN1>ftmUodYzb{;6_fMxYneRHuTSzkzZl8${K|tq^O_u{ zl9xG9SIBE;M8){_WrXzvvftM$r?qjGB5H$-G^aM=tT)IR4!XiKw2TzmB3Rkl@UgmJ zWh(|PVWTE+AcgJ(TCX*N9eb+cHAQG;gU0KKU=RAHi`RpEgjaUiz(~7&s#iwhFE?Y7K|ScVB>X6aHu&)g zSU)m?U6=XMk3y);%U`fEmwM@kHjIc?66&mw?jxhC+UvVjadUdwO^IK%l6vAx8@bM3 zI|Z(novoBDok6|q{VHYeS2&VdSvkn}O|G2n>$}EfZ@bkxvz3xOYiIj4sz;#&g3H_~PKZ@Ce%MIRvaPugg{6 z25G7~A&yNFt zpE#c911?3>A|OMcaz1}Z>Va`U&IiOc#EJp0PgH;mpHKlZcA*AR{~Sm1d_YE2$^tS< zp)4r|N(ccNr9eoEff7PMMkx@IdTJcAMZkQ_&M(GHK9?~vIwWo~=f%*d`vt~M2hCMi zU&feWlS=3$oL##J;9?0>VG~wnAdykDX4$4CV$1ATKn@J5y)O>&q1^0hr=5z z(Kl}_W%Jf4tl`wyzv9aY4D1W67g{r8_z^QJ#Q`&H5-9`HH6{BQ>n;N+WPrFzB?D$? zg$ytsW#AoAQu|(E;NK?HF=lc<6-{s7yA4E5gg;=eF^ls-#79T3x(_8{M6|WQjE*SQ zTQ4Jlr7B@fvAlswQ_!{7Gni8J%?7{Mo&V9WY{0I^bV2@1*>IaZ^eMT$2-SOv`!+ zNDpyi`ZRd05|HJ_@z({Rb&^C*-$f!heHY2(^lO!n9EGOOdMjk9)yfDjFQM}5b`43r zGfv0zT~tR3U%ji7@(AUNc6Cx8p}b<(niVKqVn7)E%seoe)v9Exq9ZZ#PUHHZD6Ba^ zVwgd5X>a&o3r2X#6&OI`6x%Q;)ixHH836akP|hN^v-3!X(9cOYS$c4?ogxPATlYMs;c@s*^iViM@UF zdb5AuzUfN)%9^KVW+EN^5w4HKtAL}Al6Oz?e2x8v;lX37r|d#iwyWf|a$n1uOP<LR1xM>w>T4Uxv;kKo)O^Eb_!gornU>#h89@ngSBoSB$->GvT*geFg^O>v%nLG% zd&1HXrqMPiqalPaEfPya&08e4h#|H}tPwS6k<0|ht3_gwc%K$Y15Ru zdz;1me;wohML=SHRjlt=_H^7TS$v9x=`7N!Mn^T_`DEh)XPH)6L!1*CFaNB8zYtM# zfEP#9G8-^dFT7YL;u{3z7Z8<+e5$*^&an1BFbZo95Er^hZe&dFxNx-JO|!WTd>EOB zS$UN#FtU-^;Nnl(T#HbUNS^0w;AS3m%x84~UzFMnNVOsuUt2|1*l?(vvgnW$U^vki zL7_6R7u1C|jFsU;tAuK;!#UbGs%_QNSKK1eB-Exwdc~<~HwR+~g1U5EeN~F{H7U+l zq&PpeOkD@M9)|aMrYC=9Pl>{h9pV-k+7{^tw?+D{w@BZoUh`Jtj{3;KZ{bt5Md;MG zjDA|^)NzxhK~;}=H&e9}qUR`fi>4Yf8NXwjOEbT%wT<=L%@Yb;uDE3FJcEC;HN0u= zV6OKk<4#G@sa)KDXPXS$Bl!X#oFqoP{4&@*GSNNGz|`nD%<}gV6=1R;;g+{R;b1IC zfi{VqQyp~)${U5CJiDg3+Pd{tdsZgH;C89=8Y5H_1Ew9hYxNDv^L#Uc+ogv0XEgv* zgESAukBOoybOjS^8p<(Lau5Z$zfrq6LqxT-wRLe2$B||w=E?J`Y6HVFN8_CCg*V3PD{afB|z{=hiX;fnnX3Rfex@V!r2c;W?9Qp+CH;)@DJ=|`?7 zLW8bHyA);s+;>M=o{DXzPo}(=kryc>zQj8T?z_Ki1 z7a(B$0yLKCkBEL~$n1J*CC1J*CD1D2&UQ%JyaXuu9ZzrJbZm}A9)QE zG9+|DJZCCh`IaqmQE+r)Mz8l1}kaBShF|*U4 zZAZ@cvdsa-0Vmln0b;UB=2cd4US}1D{$3izzw}ZAIgOOY0e;)EwB%8?1%I496?eM9 z`!d{f4Sqp}dxgPo$#B4F)RzF+X4ES1E*Oop4iHUHvTmxdJcB&d3|dF1pOeF`sNHO(jP!nN^3=@Y6`>=x6%QlRMI+h3a=n2z^-am)1TEUi?+^di!^1m z%7S7jJFgjv!?C32Om?z%L`37L@gQ23;eJ~-+`#XQw>DNi+y_c}+T@z}aL*V_T`aeY zq5!x<3m_O~ux-uLn{CHGS(T?;zo1*Y&V+gC%(~KKL?KH zqV0IY(Of?>j^_GFax}Mek|!7Q{2e zT7g%8xeopSbNUO}gn%93{e{dczj8z6nGmE>@B5Vu-OoLJx8Pw8!`Kl+#w9=k25Fl& z5UsQ{i&_}D*Utu86uZF9SMJP59ap0eHE(@7mzrYcYJuCt0vO9*X2t^if1+i~0ZvCH z-3z!mq80#8im1JSI9TmAFi$Z?z-wd4xRN+Oo1cJ_cFzH#<)Wg1ug*#Wzct#$95#@Y zdoSP@GaCRV-jND?xSW~AH|@%Y_7nJrhLe5*Vlq+^a9fOt<}f6}ZDj_GVadt_5W`Y3 z;JL_c5iqwq;Kw8~Kul4&5y@kJiUa;qEV>sE^Hef#pVE16o}%tp=W8vrm(5K;B7C6& zWKL85z<(7>E)ncw%OWB`R)Sg*crKdy9AGl_ML8j&e{7q8 z(W%+*%^3-%7VSPTQ%k=&V+f3$DIIVc#WUhO!$hKVz>KU+mFr=0s~s_I3PZLdJJti{ zR+|3!N4H@-qvFt$A?c{)f9=ZE7WKEpFv^)oyz|{7xIa4&$dawS zFyRNY*K9J!o8`z)FzZ@y_X>6&M|gg0z5vV_5m_WN{!{gO7Tsg!C=#-_6$X}KUhFq=w4^i zLM~!m@%R}Wd)j#(I5s|c<=ID|c^RaNaPmBGs6G6Ac#)T3H-bQrGNf6_&Yn40? z9MXlKj|}rNUi^6;As{=b@XK_!1qWNV4)pVHn{;Q+opvcf95qd}pQ=%yX&5`yT5gg;5GtdVvOEjDnSxk-{DYE4?7KU^XmRX&EUDRj|?v zQfQ%Ir46LeNx@1lyhaLEdf|03(4vX>fIv$M{S>U!hGyak1S@?bwZoi%V5M)Q&{)BK zYgb%V^MD9ZsC*A=6>I%P}j#NkLm?^gunNA!q19EmRvd*S30DNz@}O0ukgi}4V1Qn?L`H%sN7``EgYH|8 z&FKrpj3sBZG6{OoR_4V)1N~_h1j_!7H%wET77aOO)xJrU1zRUBFAAv`n2aX{pu<-KD%Xpbe``dkr3~xb(@6CESD|)-$4hTsdoGCk# zR}1Qj3W;%jNxTA`B$}@{im9~1u)R;pqcbwe1EM~{$IDSr)Pf=j%1cF12#6)Xdaedk z7Vt$arAn`nf@-Cf{iB;@sVr-eH7`qaJYcfQhDgaBwm*|fE|py<7U`Q>FF;wWGq*l) z@Lh|=)@u>#9J^=an;vL0*|(rB&1w6+<0f^Ne)k5w1_kA*{@C|c2Gdu%sqsXJWdD@X zjY^a}RdB3S%S=LRF{^y6ynW?)-q7+qZ*h5^@6_~&@1-?wvN=LJD4`iC_GSe;cBj_2 zIdGu03mx`Oed_}U-)^1rXzeRwc(d%QuWa3EKt+#gQm3uBu$81Yu=8H{b&(MKyU4=# zT73$2araa_8LVh>&ACZQTDMZKVYO1PwH2P1jFRkz*Zbysp>Ecfm(Y~L+)t=PtAl20 zx_!HE(;)oUeAULDm{q0{?#A;}NAOZpJfc`3JIeNeIq_7o(+$T{alGilQ*pdE!c%d) zH^NhK{#5{})(c~E(S>pTr=%32SNzX(!Ld?pU)~Ixw*QbFPi;BE%ibqJC~R5_S7egE z1QcarXR*0#h_Myt1u;BHY@W+yZ;L0k)n8h< zz9_j+mMmVCRRi*M>L#);TH9FG_Wp!j(fhf0M|QcqfmduKhxmrF_l#v10awXR8nX71 z<@NWyWfzJNEkqtoLusxV=iUk&y+Mm$&t>1d47g1;+LTdY=YQks7yY}-?xC+aXr-?= z(E1wd8mti!eZ5~CuqY{*RQ!Ffy>Qx}@@*2Q>hDRbF~SJ}2pM-8dDd)JXJKChvhys# z=kipz#v@3>a~Llp-v(*EFI<~V>?@nvipQFC@j9+KiZyalJ)%w9DGj#2j7Q4>sueN zd7Bkh_eX1a1waBdU;UWa&G#smkZ)_A=Ubt1pyw6(=D7r{FR#7u<>l@?g|oK=e97sC z(O?|L%uAu*lD*?_l|6;{J?5wWGR{u%ZP_QMh0`+)d}Bg!A@1$*I}SxaGTK`9^l=*E zYEWrnZ9x%MF@Xt+Ch``7pjdO_Q3S<>X%0&TMHBfRfS^X3lpVY`zh*L7b@TqjWU_Kw ze8nmK+eO98rCgRvxhzxhr{bV2mqIA!?o{#Ht>SBkmIy@RDX{1D}R~8H$R}eyfN++=X z6yoHm(&zHoW8yWby{zzFo=`C7Sql)S8+dVP266iCm6YSe&_tdqx6juwX!uC=v*N3{ z<>#9d6`z&wH{~aTYgFYYjY}#CNXCAcd2?*vN;PjOsD$U(PcQRciI>IANx$#M!X2vH z+$}uiY8&A7KLKhP@Us!M0C@C?kqYp35w!sLBN4R>c-%>$VE7misgE00;zhvQ|71=` z>U_frA>gA%2uWRXkJv!KmqyeA;LuQ^HKeYIgv)?`9#IQ`KXva|1K@(80y|QVNrZrx zj1ZE#F%bez-zS#>ssC+QkpkeyMhHm_W@8%xk1s*V5mSy>ZU{(!Bg@! z_AIr{o}yZSM@7^!;4vd*N!=|G0-ioXNa~zOxB&Qoh*}1G=15smFGz%dFB%~v^ZV3<@3xuRFGg-0#Vq<}j z6lNxbfX|OsGY^Q3g|ehDGbs!Bp;Q*|TM@Ms!Fwj%n;-Tp^<;YrJHTg;5R&@0L+0C5H85!`$6B*#wGcw>e?ZA2$0Y73WtrYlMi45?V6GBNP13u4ivKsr@V+${!&H;{PpOS7xBNRN4L5N_$WhZ1;9^8WH{tMNhrWCWF>*Wn#l0br$)!S z2>2*NwRIZ&ghYnReq%-k{3nSFhyA^T0{ltyxLN`5snH8B5*FgNl??cak!%hSKQ7}5 z_|mKbU_wI~Lar#mc@Dt|NwIr_o(dNMw=bg3Uytfv1xayBY=f4Q} ziHsXC4p`c@e`onbb4kyR-s+-j4E#_+{iAuGuSPF)5ms?!RQHPju?~4B_RG)029Am< zdJ!PD(9)sGf1l_8QR$Yh>{74!2@4p{j)CL8ml^nSdycyUYBwxOu3(rjK7IG#GB?W@ zy?ExuAL)U(z?`J)Ftm8m|6yJ+7Qhkyi!~``;0_;c-YRB*z!Oph>5rO?#R4F(!gptn=w#;GzJk1U=`?i%m9I+!-+JC9}6&sqt8oh zz zC>`++fsNwu;e;%T!(S7Ov~=c^i98gCzb2+o96`kbbAPi0NNk~Gz?UR4KpdBn;j;)4 zWQ78FUbMB@xFBTC*P?#Xmq`>8$DWl87`u`h08u+7L-p8HQXDV~GpPYEH+tZE#;JP& z5Pg-BfD74d4vc#gTgNft=d>MOwdGr2vcuC_a1%Zf=qbcyrN5}yDD-)mrUL)JQBxNI ziSy<7;|rF1=qc~sZpyoNCFMnlB^X<~@-Eht7fn4q3o@B&Yud|>qiPLsQm#dmi}+K? zUS#^XlEUc+!8)j0t7s_MZ)HjboHS}5;Gw5c`?_h=zAhT21GHL|s_6wfp!`sRl?L3t z89Eq@PMhp24+c8aZHnPuuW@9GwRUS!D&h(&*ZE8J=+TvP$N0f9wtY6@DCh0O+pouH z=X{AkRy*oBk1nHc>w!(1Mn^w>hD_{Qt-DPh=<%2H`FHHxkoL_gTUz+8okLPsy@W*T zsRmNXkL+5r*-PoK?CfOtAtrp8&CE=}(wQ=--&+Ro#T~j35|rU$+<0Url)$KDS8QBy zGa82PwRVbv$M1iEqwQP;@g2y^_^K%rq>=s|SHH;jv|U4AvtZ>mj;}Y+`WgdmswqIa z*F<0c(E2Kp@+>P`eBm0tT${2|uZX4h0V1HAIk@Y_E=(>zboV}V*Pz_nKY7T$(Qn7N zx4aoMj-&j}pY5@6LZI_@$+28lF#-Bk%BK%u$x*PN0I5Y5mc9}}`9YVr4CT+)pe>{d z_;qb{)7xU3xSVm-G-l9+NLsemR;Vv1%XS+{l}K5(+n8zDRGKka^Y8?Ae`yNz5AkSe z4v^6iyDCS!@Q}(5W~pQsJqZo@ywhaaAfVP4m}v+K5NoN8zwm<@0aorK;R=g9FEl0n zt3&O1iHAG)^1{dhHkAyJS^(vfP`Ze-C+{Z9&W8K~SMk@{?mf&9@YQ)Qz~LB~1xT}i z$;xT)N8SIQ7`Hmn z`df!fNrj;3HRunw07QS^vvbI?8HfIY{qW8qCuf}T3-;Qb!~5Ie*~9G_IFNdB!U_jc zS0$`)c%`Md6d)Y_Vds!TIqm=m_6s|Q_pxJtj{F6C)6U_8?BM?jdkXeHcMdrT`HJoK z3wE$;NNUa^2*F-``H&RRiC}+x*N_yJB-pWW5mxp0iSJpvhNRd|6b|R?8j|8Zfnay; z8e(5O1uHEhh1CgGqOiN!70lD)RZNu`DXdOtMP{V1xxj(cQxXS}q(7SzT9Kr;NWqFE zxoEItXQhG_-66$}ykNyoa(H@uq7{80#ZG;okt|you5Ufat6g&Qb)`z5mm60d9$I}E_QurCc$_SCd>jYZ-4O?7-6+I($njHWL zR>p!9%kIG87u~^}U`0z_Wmt|20rnyC@LDwB`Sys3MvX3 zqWC~DimsxvDn>La5FvmMAVL59t4`OqyKi^jvuB3I5X10cPj%hu>Z)H?S3l0V=iW3R zOKA%`G!j`shZ6TKoCZp}4aidBFxkmcBJT@VkfcP`7q0X?CC;3MD_&6I^jWxqI>#5> z>=mxy@F;uOb$9>J>xS<;BfBZ0nVkH+n}4cdiiCWyrB!(xSS8~>w2HVMxX&xBT z?MfQ;r7sT+(p&*r(u#Jpjga(nijeNBQizlnhlJ9)%+2ez3jnRZKI^vYRc*DZo@yc1v#V?n zAc;EJyrc*S%T*uz7iFPloA7cvnEOKA30hs@?+Q;qGH;Z+TJ)iei8NkHq7@bKXM^sz zUQKnml$2_5+_b(99O?(h+Q3<#mJQ#)xP@%RVsl%|SFtZU8;_h8f5sA%#aa9rJQigv z&nf?J-uf`gVt-j)(WCKa#K;L2fnY)T-S@I>QN0zCn49;Ohyb4RW{5~^v+W`J*wV<@ zxo?9b$O{gCF&i94)iwXCH!bP-mma!rd*UPYzU_&d_1FLQMAr>uRK8InOPw@vmR3LY zTK!$NA|@N_wu2G*3mcKjV;*~x&10qQNoR=0@q$MAS$NYFG#1v%Lp1JO(71C!s75O?*X*%|9;r;Kr%Aq?U^Y8g%@hZ%0kUH;Z@sFF*Am` z6SO*OgGe@Gkc_8NSBpNBaT*veV$q6<_%mlp_*b_bsV)h^eieB38u$W}~5_<`cEey+e%71BF8cuDLLE+C|0nMBbmT_P zytXrh=A5@OMA_iI8sh7|`!DWWPyf5`zc50$Ga}jSUUHu#9iL*EY&p`=>9Q~5l6xS+ zz3+~QjC;Z1zB?iwhjw>Fbmk`W@$Gb3Y@}(gwEobl)sJmWO4ih^1fwi`wRxv3l80|O za*g8!jpGH4!?ql`#$5^;cPVJhU&!RPMX5$viKb2qD;>Q=`%NfFK7wS&X>SI%+1tBbMT=T$_u$)EVU;k~qz{(7*zyFGnChH8XumrDmok*US?wa;Gd{YUWYNrlMxDI$_sPGv98H9N=@!jGU{XMr{{PrBY2J)t2@lDWnumoe@lq(ow2P%d85={rlo3AbE7Ah>X@< zWOW|w>rO#Zw|+UoQ|^>!7&A#XL- zSoNyK3%5B!rQ^Sa^;rSN++@NEGc*Rugm&x?-2Bl`EsZ~mwJS|#qm4gAZ9tC%v><6# zo=2j!Cwr;v5v7jrT!fqFUqS(CnP&@+OzAX(ED;K#c38K|4Cv2dtffIUc+b1@}G5><-w7UKx$|>PMN0W*!_Cd+))= zh|}>Qt;z8iqvO7VFc&-bJsRwAAiGJF$bn#**K|2b*5OTyvZi=c^8J9qGQ%DITw;q@ zGL{}?F&cO^pYq7hAGE#C@FTBWW7vQMjbUREH0B$NVK(ksuyNOdjl1S})jQ?XMmY&d zofcN=^Ux!&R9&ZGA=mh zP)^l#s`(qZa537rmKVx=%2nG;gQFT*vaK6TbZ;pRMq3DJtfUC(qBww7W0zeV8sS`5>_EPP{(;Ia4xBg*fz+ahtD^y}X7XIa0mdzq|N zS}l<48BB!f^Z)Cw&q(9WEiAbgGXGa%r12+u<+Ty_En@|TIlc;lk@tUh!K#Cs@w%t2 zPUK!CLHbfV;T`&Vhy0gvcJeP8;kQV1aSFmWHJt3amoelT!@GKe#`2rR)tmTln8w`; zHtt@qarbNuSJo)&81{*nD6G`y!h+SkFd}z({su1E0Bu}L3)YfU?rb&kEDH%zd1)0h z+CoUDh7=)PoTd;BTd?MJ+l7<{LteLCSC{Ix>s75;RS&bbozi z%0kUH;pGhB6+fZw1g%~d7Oaqr&{9{6K9upkpm=eCR#e2FIa9*Fx?oLpxut2U#c@MT zM`=V+KRDI~PW^@9sv@F~vEQcAB=rW%cD$cTdAyT|w-J?g+V1g|RHFcxDil_#uK=@} zce)Kc%#+~BYi7>~bruYLk)JBHH90RbWBna>6Fk=7tT!p&(`#~8MIaa3Mz_rMDUx)( z6zfb^P57H0|HXB9ITjrfe@2*;4!zUWMqG~}!+Jmd3?6HKY@~d5_W+%BzYvf|e>IBq z&mzec{DZ+2k@bJ)6?x?~ej2Hg!iK)!E{#r+o#Serc;r`Jsq7| zqrYUVR*OpyQagECsK4n-l)1gOe`J~{iOD6^78GyVOu~trj z*CQ^d)Hq7~Dh((8KKS%8>S3UgemiT;B|8p7`L?s3JhX2FkSKzl3JJo zb11^;8CoqI4XT>FZ`c_O_YJ#>VMYK^zHivsfM%rK{b6Tsv#yw}qSfXdOG_`46>i!c zGP4Ue9p#Rj4)bB{>0w3s>RRQcZ7DBpsdUhx?Y=H~$@C`GE33s@Z@cfo+df8rITFil z5A=$QkeDP3C%WNV7L+0d$zw%@<&`d|a{W`evceZksw#a8alExd1&zm_;Tc!8BGn~G z$>X}I7RRL?S6yDF_2pcb%HU8q>UD2<;>UUUg>yX#VavgfM=LL#XGuzSG8tUy~&Pv&kRSskcVIYW3ud#LMw`SkT6R>aScjY@Q6jcP_FnRHA88bdW%7-&GzOi=Y4kZS(ztUP(x?-z;E=|fa0Rn8(wrBk~f3}XENE{-Ax;nUF%{Dz>!XM!s65u z<<&q(|Fl^|FaeO%m`JaUm}D>fh6?5m?c6QVdC3* zxrI5G#Q+i1X4+39%JoGWOOBgHk#L9J5^O(d6AjIiN|c0ZvNKYc?lK`^AjZ5cIUBMt zg{K;{e3wmB+`SVG=?$NznLg6MO+lH2AcN8=NNxyse)~yP)}DI2!!M%pzA5GL zLqjLpE1HzYySV=t@pxGt-^*4xzD@j9`&O~?_~HaPNO}9&x~ykc<#C8XPEj6BeL-{{NfLRh4cv=>I8y%8IWOJ2jaNM-M{w`~3L%A2yn)W)Om|Z^(z%0btB%T}L zu|B~o%BA%R=+EaX5j>w6+dwZh9XQN&9g$}8xV`nU9uTaShv3 zpf22d@HimtC)ZlK3UpDJt^u9BY0o%rd4oQeIXUeer#I~vXIZ;>Rud$cFZbzjCUu~Y zTJ_|g8pm5ry^Dd3Q4MOMGu`@0MhM|7g> zWh#f+e z2fbzAQZE#<)E1ct(#nOoLH%dh%eqf;=h*^jYIW5JKqc`a}K*Y3L)vv!q( zUC1}>>ppTDLrQNot_VUNyI(9w>4U}iZyyk(^v56w8OKB~8}aEkFX9LYbRG*`Vu7w!gS&l7r}<&gg}l_W zrXlG9SC`VczUR7-j13vZkbC=X>q63fA_Ym`xfUor-S=b{k{*@1ko1zPONovWK}dSZ z2~wh?L=ci*a)Oku@_jZ98TVN?>od969J(f=o@v99uF+fz%{Y~p1fM-iFEJ)nFdd1t zU^?n*CL?UZ`l)8pc>u2}fg3=T#~8WL#z5!`+GiPO_N_< z>r>A3F_u)wDAHy3d#W3n53{SVo@!(G8FtmyfAtI}_8)ewU#h>aW#Q-BRqA@vjBsnL zl*@(j-s~B|X{}pLZ%i2}WcIrR98cjbRZmCk0(a--C@t_&AdTs#y zy(l`N8DA;~{Y=X`+6FW*s2udyA~|T%l*&Pua3YOq8z}-ZZb)N#HF~}X$lCr9SG%Fu z3W-?04I;688)Rbn`649e=L_B4XTeS>E6o)nvb-#nuiU#&=|MjI_1c7vRK8;GR>32Z zpWnMx_=x01d(S(7+~XpE@%(6bFl6Q$l68m`yV5I+#HWhLe zIY`zkvh~~7(jpmCq@HQXjf5vG!jYUM71NX@EYcIfRoGd|psGCr4i;jaYUPrZW-tpZ z3cu}D(6v(wT{7M-xW>kR+VaAJ&b;M?@-;^M z;3`@VC#%52NBQh=e3rJ@spuXure?}EQn_8Zu4Z5JmUErzD{@?8U*TbWldtt!r4F>h zQuDl7ato_2nU>F+Wl_Sqt7ftUiI$b;%`($R%f<6%Qy^Wx2QG#%jn<1Y3}FdVGZ~45 zdCg=jG7xJfqmeMEnal*>RWlipWS^SJ%7GcNW(JELwJtw&8cp3$Uh0MNQYVy``k=hj z1?8n4C@*zDd8z$=va%1-e$YDiX8YMTyx*4DY#tVA%r4w!OK&{E>^~r&S!MeV(xCPq zq}b`Lgv+em%k8?bI$_H*7d)a*8G8!*iIECmu}$vCXFrLwpu*5YYzweub;3i>T(I$7 z^0(Eqw$eKC%?dDSYXz(r!-L&P3`qsLlXwvpA%l8hU1r@_=uVoqg=X{1_W+6fKH&~@N+O;6G zpyEUNZ_8>`l()6Dp?SOdrYR1wTu904Je_~HBfP3!WvTZqb}cv+!@aAC9qYxXAkidi z#8YQc_xT|A4I_im6Aa7$3Q~|^1c|oT0;Szx0R?Q5aZYozC9HH%2rE@5Wiw!jHzY&e zrCr*5unFoAgT{_HwWbEepQUEFv`Y(*j9P%E1(~Z+eED#T8G`b&BYn}K|7&>@^yRs~$9h}xysME^BGTeOY0@;%duou`>-Z`>m|1DMs?g$f$h}&9{ z0zS%O^3-}=ns&LihuYIjJ&Q@oXBxjaGCyJ;o;zG3+Ft#9-QWZ%D$p9HD@V|HNri4B0q z3=x0EtiTKve?~SV4&u+!-X3O$b1k*NanrUPH*IwoI2}1zl2ad>S7<>}AY`*5lwk4bbIBvRuc3ig5tXCZu*XU8l zO}EyLn{KWhm#s8Yh~sk8fD;18O>tp82cKUxE!_Dj+~rBVm)jh;zCP~W6z zJIKARC;J;*)7qLY#K0g(x5fL`R#V~MZ9+#{l$p)3!|@#c>itm zCf1#*4?6VvGDwaYRgCPypb_gJi3AmE7YfVLA*EH*F{Qj23l#>H@@9=k7%30>bRSyF z&Nq?-Rd^0j<7bgQKR6gq^~1!%(r-WLpT=2;G9pS_PD4t0#MBR>d)?5)nV3VEwT+*n zEI_mg=;K2CKoU|aMog6gh+Et$2Tf3kb;J}|L0FJ&!>klPa}5@?E{zs3Wv;D+T#)7qkKg+k*GG3G%6-&pbbaFa8r6!|ufgg5LkgV`U z3X(ZZ^+WIAYc6B4&sY|SAlV6OP3Q}K%?Zdb)TbdC@>&!6o&NsW@;0MitCog;X*rXo z1g+}_YfMN!*jUQzm>BB=p8H!p#`*;|JXJUJr~HtefV|VQW*`}!T9fg~;z)VW3`*$% z$kOb?aMP;km{MLo*GwN}0m~3kF@^@QFS7$AL9JrY;e=rZGLHE+^N*@a16+A&ge#8_ zFD;A-PnClv@WhL8i?e6gRmIX6R9>4P6m_K-Y!z>v1r>{{I0W^@1N;$NtYXxxG^s0( zs40a58CK<*!XfT0GE`IQQGIjmnPV+EXkF;gGbjRXu zV*+}oG=A?+PcXHp`_N1+ooe?!G~-O=phGY2?&ldM5|x9dXJx8fA46`gJ*KA6WhX~Z zX+!f=TBq8xxIfJYSm77DqJb1T&{6fy)i(A26Wu8HMEo<~ZMrj-XK>P$rEZPo@6G)i z+u3Hg#`0;OR@J6C%Q&0sb&UHm{}Vkf_oE)OwAIj+H|VtKVp#>;n|oILecsZ>v3r_7 zpY1`iWvd^UNIP?+8neV3eKI0{QsmfSJHNV`;D~|wQZgMR30oGyZ?~Nbizbm`;qz|4 zieC=N0!XAFS^tPGNOG}ArE6?qyd zZ`Dzvs^~kyT*g~xX?CtA+(k?K9IgGc^|x>rFYQyJr-i%4Qop?1$WF_IyUo%*rN0W? z?Uwc_F`h(r`=!}k5aG(#^@$AzoN&cnN*sv^S1hB%pcJlnK?E@vg)5d(Vmu00yrA?M z8^gjC%P28Wg)3fAA_|2oHc%oag)3g95h+~pB8^2SOC*v5oGc~cQ@GL^kx3>HuJ}gj zWJ?0V72hZkvBG`$QosKueuXRcrqL^0u{Vudry-44r@=*A_*b{a#2zQRvI|PPS6HEr zQJSdhzX^*&VpoJyV1)&K99_t~2nmQHm3mleSR2h6=cG;2C?qFs@-P@=FmZWqV#|Y; z+{7$PJM)goa9Nf&x-3_>%)uJ|b>|nrjM~!!40Y8|IM_nmybA zl4CDOEa_CM7emu|`ewg0ib`+$>r^?Wc^4IgvKU`DbcI47-Qr#NKe-&)C|-{EFAt~S z#1koivFM0DgO@Hum{yoT;yO$tB>4CIFa=3C><(fC*c;>t*^*<3#kzRG&tO za0~B4(#KWOewXbBKr=Lil}6Tr;us}%7>{wx!eczfpTQe8MlmR^^OrJ47Yte0r{fcB zS(3Y`q6E6ay$2WQ<&j8Fu*?=4{_KnH|2<<)zfeqHa*tM)NGY_!O2^!2h5VU*fsj2B zX<<{>MVw((f0KaTV*aX`DSS1PjK$1UGt+caGt+ESGgI@MEYtJJ)G+0xb}274OL?hP z%1ez>UTRbPO$ILYxvAyF&{I}AJf zq&_htGdd*UBYILCg+(g_lCV-#gatsa^Cyw(?{HGFKrdk_O{NhktQxiGA3ZD!bvYW9 zNADr$s7{p4zvjsXO=xpj?n1WA8mqGabs3%U=!1ve`Ha|dD>6EVo*AX4JJ|^Pn$)d1 zw!b5UMq0VByc`)FsR&T6nvYX&r8Cn;$Es8aNY*VWZWLC@3o?y`W|>K_mSGk5RXV=n z&(eVwf0mB8__Nfhg#)=4Yc>jJva&Rz#M!L4J@lkDwOM3E1J-g{D%_!Gr>XT$Lu$9q zd02a=U*625%@>aDbU}qjCDgH%6xM{^sNL^HUmJwb-v*1+Yt8Yr#j~f9$xwyKrQ{|x zv98H$R5f|6R;0RIkCuH)z0fq9)|Xq4ROa~vVWl-ks|5?|@Ar+3y8o(!EK*ssN^;=Y zc&?fV{$PjptYSrsFS>BYQ^nqGkIHdX9$$3fsyx0o!c}>EZ-lGz&R_SJL>6T(49h>c zq<~(?KMOOBg^byeZ-yrMyU;AepE!E<Ib(87@y}p3+Y4mJ@Six$(E4y3GFb$!B6iGz#oKB=7gel znL}i&mg;ugRI}rzdi9qhgVoKzps@jj&H|mlItzf4tD?`tXP5iwWjQ;%I|2*kTuTeY zg%!GZXl6KUspK#iDzCHIz7)XGikDRX#10KguWt@gyjH$b<*y7bN#(CJ&ZT5QGW5mF zi@beJEpL!XiO!*~UIv3}?{v>Sb^hqC@;Dmgl(F0!b|@Vm1R>urAc*Glnzz&|wbbj= z(o1|xJ;=DF{5M)8L)Le^ewq2?Tk1xp-Xkq}^x~GLyiY(TFhj;Z?5C`3Wh= zFAfM&x;6+xPTUe}r1T2oiblw*2LvhoJ_tg-;MQ0prH>d_G(v9l+gOm&w#F4f$TtiK zQhL|#Ty+tIywz9^9!eYk-U~t=YAh#6>G&WBdGUZCrSAtp$ou^vc81cn##LvGoEi|M z^u{0vdH#SPrLP4+$lC@4DQ$k6_ZsrC#&TX$+CKjWv0XGIW_BjWv0XGIW_BjWv0XGIW_BjWv0XGIW_BjWv0XGIW_ zBjWv0XGIW_BF3z8?^wV5n}$5jvz9~t-dLJ|q4&7awJG|) zZ>jy)b`{o5mc_UCi^1iPkMpc45*^7z^+TWP*K*4t$q*_AJ?R%{%MUg3SkIbEN$Y9XJ>k};2@T7F0y*NCfSyOZfBS~$Cen}WYkaUb} z3?UgVT9btU=qnHS4=@as2Mw5_4wB$fvDESUWxA4B%73`BxvlY31N07l-8TVAhLPL3 zkhr8Zp+mS$6I&1Su{DizEMdeENHT!vhYTGv-iIawh!`aCq-H=fwnYq*v8`gzjBOEv zYyz}?Yi#%}#0*y;-7$g`dcOcEBsj`VNJwBTL%J-7bXf|i)&x@)fC4il*h-s_K&v&O z!B)f|fmX$!!B)f|fmX$!!B)f|n_#Zr;J1iZif1TS!2I+GX6O|GW=OEDf8C8j6VSC_ z3U$o{Y|vCEp;<%=*pMJx*QEf&CAe$BHh|ZHZ6L1&+kmdGN~`4e_{x7keq;nW^oap- zNKlq12_TyQ7qJv>VF5O1DqzrnDPTi3;VRnNpekZ*Fcq;jh}JIzllPvN{=oAM5uVWR z33x&RqV(pP)fAc#tp!s|YbL0c;9}P%s6ql;U6%sGUwZ@^;A%k%BmfnJ2D)01LQ^`Z zU&Xm0Z|siI1jP?TC_-NtP=o|HX?bm16xXgUptyE5C<2o@2n|YtA|xOU0c`E+mVm8Y z-3GAwjb|H$cUuR@0PM37V9?(QfI&upUE2uQ+imG1$X>ge0xM9#0g}~0Emr{cS`X|x z5WBW5V%N4ptbR-1#&rq|U>OBwKZr1cz9C=+8DVyPTg7ROskINsuM1SstV zXikd+N5}}rTiW7yODi1fHxu43yn{FnN^so3FjFI;9~E$fjBvc8Esl4z#qo|3j(2z* z0ZL7T<}giggp6>!qb-hiw8F7|HQ@bAZ-4~F?IRSS_YNpRMkt;%OQAFYll)|Cois~< zkvwEnpEO%Yg(uB2#{iSoh6XZ05t8{;#h{rjYHKJo&9(Kr^_GN}mJ)ct^^^!M=x%@u z5`?7PQ`^FIYFoHYEx~oFhYR0h95` zBMMG0xplgC3%k`VXv`KLPM@XF;Dsa$T#bQX#SOm+nXDM)k zsCA)PnMhqoPU%$)nge+egWTKSyj%gvX?)!(g(HI;B%NE!QFw$MmT9xl;goV3lG92R zgXVBe4n80`!BjD54&3TyDR8c-g3uhp)q)h7BJn{QWSjXP9f@NwL}n=vg-0xoN3jU~ zv=EDs1fbY}l83tBAGk--6by3zHC^)xixuy;?T(zn3eCLQsdn>oY|{XKn6s!}+At8C zEQ+5>OihbFYhz<9kKIkSKHS+_->PY2t90o_rJ;0@A4;HBLQtM(eEeRmFx=WtwYS;x zJo5X$m*|s^1Am?B(YB}OX3=Q1@}f-4J*|UiI0}*WPLAcYXw)3yb(5NTk+2bBAG_K%}+R=(O@Mm*-ozQ@z!k z%nkg&5&^Ld=n0D~Qv!<^plrP!q)WbUO~rgA8U)+BU9Mp4T~Z!Q!pAUA*;n{wb7M z+pla;y`r*@U;+7H#dHy%jd8q7&4RL%t(|6NdSWIDNA*iH^2b%_ip}5e!hR6)DYhRQ ztyZ5p@>(mfVUyk8b;jbvLDv54*S7QfwTWjNd8}uZp831RwppBpi7vKV5A@ru3CP0Z zckHIbE`nx-t>SC@^R3W|bfZ#uKCTJ5w-{o;B_>1Ohg|&->9Cl4-+jojAD&~(U2`9D z4an);1x~IQg7W&NG#?b+=v3dA@O3%Xk`n>ya#KfG>Di00>P(vabAV;Xpln56GkaE4 zkNxK7LR^!!%MK)l%20i**&2a1TqshW3XNu(1skHt*@_Rz!r}F+IcZDT3CLh>fP^o z&3jQ&R`+0A$jo_-lc^I%yVX%zQ^RI{HT7`GjlZ#qL-Xd9S^m)eavrGWyA{%7kkQvH zI0lavYpEZLMNORMERpK)Q)fy#oZG2}G8nqvO>K}{c4=i{m0HH?Exq5% zFnAOH41Si$)aFgB1~u_7tq#A`daA>Dm}(gAcUoVPZd$pJht>M3!tQXWe8zdR`1~O6 z`yr5wAUQ}sZ?@#jqYMxf;y5}{0Kbh6=X$DPI3QJ(T2Y&e0(=>%+Pj52PxBEnGh-v- zSU)ndcVH>Tds_`^;&@seehH9NhjTsEFdUGyzC4GWRu)#N<*LH&7n&ae<(k#_{A%xe z7jl)cYPpiit|>wxj-wL=@Z0EcuBRG?15#C~6?faMs=}c+1*F!l#+y?-Qa#AG2c*`n zE_wM1Q-negK_?2}x6$D+Ni{Sfm0BT4-95Le3Wq)tkdmjL4UYGEqz-}nU_k2HB2uTB zA{2rMI#B?>gjA}-VUlWSLMqiDNZmcRstSj`5|FxnHQs#GBh`icctGm=Ib7*Lm;mVNZnCH>PABfg&=}X6u>Vb zmFjSqq#Bx#N;TYVx8w`uhS1glsgq{$=4y{r7xJe8sgsJUqm2@UAc9U5z%L<{>TsB( z8k&$wH3(97&#kHgp?v~Ur_S;%-A8+*dXSF~NS#_l>anH>g&=}X6u>VbmFjSqq#Bx# zN;L>lch9Y=!lC5>snciiW>=5Y6y%cvQl}S@db%k>A&8(81@KEqr8*oYsfH$`QVoLC z-E*sww<6SceX3Ofsk3MC=4l?OLm;0SkUG1F)X|AT5J4vj;Fpj}bvR5?4NXX;8U(4k z=T_wr`anSHiq&}Y9FJ5NawZ^kMKPnFVv0}*BIrZ`{1Q^B4u?sqp$Vx}gCKSH+^Q-Z z`saYuS+iu_>pW6D$eRLEXBA`WTvLQX5J4vj;Fpj}bvR5?4NXX;8U(5NyQQO!mo4yC zCb>JAzLH5;C1-wPfKU_1slJsV3crmG=X$DPI3TGF?W`XeE!@ma&2uNS?QZe5xldc) z*}k9MDdsk@+>wQhPV8E!(*uY3)lB^yKg^xBUTIf(c^BmE#&Yld@ukCE1rc0eiT7DzT{i%m3-*+@!>r|5E84^ zv|gXm)j<$4_91@{96n(C0p9j5WWT>tY>kY+T^(=`GS1yEdcu6MC`Q@cbwB zDgD-mPVa62`u9(21*qBxkfm;G>I`E3z1FoKu&boOpBVYuz=EtS?DRG^5$IXj%iA?G z60i)}PIdeeI)c%uJnV_DzcT}9N^FA+uDv?0QPZ93wbl!l`l!zv2vUrP(kqopQu$NZ zxs=4+nLoDJO%3cUdYCyzruY+;f+uT#}Tfg01WiEsKoUt4{l&%bdkiB=fx=xVNQN|UGkS7iZQu-u?d>MM}r_F5IaFiFE`L6 zgF(hP4p|(yXCVhL94zFBc0m-t)Q+x)@5dg#E+l|CK}rBLQgtCg#|cvUq{q1n`DM?V zh9s0-T}pR)!7e0t%R&Y+hQ8aUM1YHdkbvzPp>(nDqb?-TEsa1f_8ruPe2HgGL&km9 z?GN@v{ZdNzZO7z0k2hGZA+j}7(mnKo@}U3SI!W^`^rjxFX}V~cv9u~QeWg{Q=_&CR z5@@w*3aIi@L{%Mlf`!UK6Vrv|r-HPxSsI*}z_^!szp{DUt^Z??0rLGGpaA6d5gO1S zB{2dSdk(!%h!DubjMb^m*!OuxzdDFPf}M&%gN5P~8?UtdcDQHZ%xfZNpm9)Ex%-Uy zSb28jBL2KO;z85Pt~RA6yW~gC=VVvBz9o|9YF(_Ojg1QjUMkpx9^*{>-|tC%O7Hcl zuQy+lMd4mg>bEggc3iRy!$`VQLxQ#sjyjIcZ0e$V0~02Mn);0C;3_Ls$S>GOaWm0s zc(Pf|q@q8Elg=B;W7v_hlt-!}-zyI%$nMHZTd%5VGmW0mwSV@vy$S8({m6tyeB$27 zcSQF4RQhAVOxHc11mVPy;RJS~fw6R&T!18Ns z$CBC}f0pX%R0kTc3?7~J^WUz?sNa;I45OUemVvQL*AvY%<;r1)M z+darrJZlmX-xY~opVC*ngOiX~cvcVctxpBmNysfC?|OYoukhYYLY_7tNa;c5v+P?S z9~!~X>r;A85QL2JDr|6u;^pAWQR{*lptyBDrGq^lT}Z-11{WkyNzg+Al}Z_a;N)7M zL=cG}BtazVAc4-+rSvY3_%tM;<^(Bi=z*Mu1Y;*i37Ewi$Qbd$_N2Husj3HC5CX5J zHR#vaXSxA^{s$klGhlzIVXsx8fmf?SgRja#f7S=>3_uf;Dh7anp*(1y&?cY{G5k~x z8hi>*K33Jct^E&qJF?kaBl1e~`iI{8iHafP`!=f?miwUmE05@SANm14beDlBsHhvz zw5N~wT9bIDVoBQJw-V|t2d&eR%G1pq<%nSPb?3w$;SGQi9B@gY@M%_g30IhY($Sp7s)T}*{5`h52#)n zV;9T%2@~%hjYK-Q$x+uA(Z6+Cez9pGYsxbCHe+oNh6&`1XZaCKew2!MK-#N!5m%ds zH+fGdAa6HTEl1&xUT%hgzQ0eDGmr-wtKMx;cvg^$+^k8r+W@AcJaj9Ukg$Fm@yO6u znJwiV#O~G{pci)#4>iOd>ygVcM^znQANGa|>2&`ZODG{NPmx;B^fj}+$4K>0R_|Lr zp=CmyY9sTXyrEN2X_1}E6*6tEtngKZ(Zy)uTFPwt7A7K$X;*uL5TmC`Jrvg^OLVGT z`+416vy57gJie)UIT-BiRe2w#T2PF~838o86psgk5E&4EbNi zazQ|8lef4EA_#e=v78{KbAlk`r2~SLZU};q8^6^x;xtlvq;aKb$V&$VDg7u2Lf$wa zNa=S$5ORAvy>(4f+QYcgG~`7Cg6qUN7RWH~f%#>=8zvzEUJdH?DedGzn}h^-CrIhT zK@gJekQ*bA^o6TS>17_CNk||zK@+$x2top}6Qp#3$8i!e#<8$(P~6tBcMypT(JqJr znA*|x@NMN$=|TdS6Ql${vf_sX9VbZX)}Rrx<58K0+}K#IE~UM^U>6d+Ww{R-L*MOF zBEZE!NWgZDP`W)d0!egBBajFB4(dYwqi0P+#(h@UdDv>tt@%RWKgN2A$ktp>_s|Q< zgWkp<)%8Af*TXzb7k$8sjrXDHE3FDmPl>mXK&!2$fGRIVRMmkeSg0H{F)d95w*z&s zSsI*}z_|0hU)jg8W$jNRD5FuXFeA>1C4{SUVikLck#5yMf|xq;z85Pt~RA6yW$%oZS0Eo8Fav0 zt&4TEv2pOmNRyR}Gx2}NJ^PfdHk>8<&(~xHbkBYpW8IArjHEl`czs*cadc)=7nN>| z{K0f^l|?w@|Fe%|g}RT$Emx6(+~0@v%$Q}nO?}pzfFwuOTa|Vjkljm*=Bj#+nMO|(w>3wb z(5&|(%UvTraUbM6BHMT9%?+mOGkq2)yOaVI*ClJ{jgcIV@{JMN4Rv=a)Ge*=gUz9C zc@}A7vt)rE|HN*Lq_)SOrMf!RsRk^AM`!)go-LIt%u%^AnK9B9M;D`sYbnEbDrS{8 z*w`xFpU9;OR#llQ0i@x^2=f#$mKxTbG;&O0;wxmRTDmbpMWn=>Io%jJ!p;n?@<$a@ zkpFOCeA9u_mBy9b2jratf|R;X=Z?S>*N6zYySb>j%+s9vA)#2KEQiF@d~SP{P3FL#t0}+S$(w+`VC&^G7tq76@#Wd zIZ%YeGZjlSlABfCuNKfcEvY5sU=_cMj%9mKizDWDg3 z5N|WJ@At?Ra?WS%!>xrN)(*fjnkF zkkXfeAmpNF#~LYZYh2L?dH#SPr3-=}~N?3r*af@NV}YU*uVnkoc}cpx3AL zVejB1X%7QO9&Lh*@tXU> zJV&hyYJlPvs+1n*@#sPl9A;0mELaLIbZ> zg$7@hgMN<>+8KZ*CRGdo0YiDvK%q@Q?`(mna?s#Ym@eeYjn@7fyd8x}vZ_9AUVqkm zKXI+q_~r1LVPOu+mwQCzYq&=L*6UmbqM)K~K+~Qq%pvhi#nOxvFU)D3mQ+`TeM(Qa*i=bq`o~F9YO*U{n9tX)c%j|Kx>&xAje`sG`C2KMZ1%)P^oVqk ze8>~~lwRa>K(CFlx-iGYo1^fegPS@d4H~yFf4YrlvZkyqe`u^5e43qrTDHb+%982|+G()-B9|>8U=6 ztz1IF`d-8%Lx0+ADJ}ctEfUropcfbBe>AlldgKZ@XFL0F*Wp4s-REg}iqv|%ubHj6 zN2<44q@3@QPbSodXTU6tVzhTjOEl(TI8XagajogNa>3~ z5b~=LxV=85XBm>RiieEBEv(`}wz&Jr!R-Pr*r}mik7Umy*@YyMWSI+jagc%pVW*A~ zh|2055=2EEByhUAlt5G$`-T;8IzdXG^x#fI0;dzC1frr5G6uJ>V0RDt)bD^Xoa?jo z7h7Nwm6{^K6F`&)eZAqO%VeP0)gnseputGxpaDtcQfQQyqM*DK2Gs`$w;5V02VGgz zsT?#2sT?uJRiPRyhJ7u|DjrlS2u4pVk(@##4(w;t2$NSJvHJ+2C)MW2M zcZbX#<7;DYynSJ$W2yQFjh(SPJnU6@XsnIp;Wc@%D13XorkZ>pO9?)2-lI=xb3ep- zZ5)!yuiwKbAj~hhB9ce!(Qo5~{7j8(oG|@CQMh8!qocqeUYlSc3E9=piLW%>OklDn zIL1^n;Dkj-T@c0|TI6^`B@k9 z7UbY6EJy&UTTKwqAEA>!@I2OIymATo@V##6IV$ppWbpQ8J^!^t)C(+A)I-Ux139f&clc49I2QI zSvtsSJ8gKh`j}iO|q*5*%R>`dhn7G(moHO2S?K zoCB18Y+Mn9Ja9S|r1VPTiXh}02Lvfy5CkEQeom~B(lN#rjgU(YjRh$^!nh&``P#!` z!3>=u18lDG*z_Pb@F+||0+7Ph>rLg z-VG9{oFFC851_;C-I0Mh0I3`_@TeR#_^2H8b=Dy&mm;NdfU=Fbt2}6&*1FJmt#WA?b>jW9|FFs1 zI}M5Y<Ht!$5V0P?AeyS zo;};-E8SgdoUgZa6bRksZQuy{d}l8DZMy~TxfiAI$b=5f9-cdH5=Lg^Yt#?zqau)mT%)}EZ@f8 zSU&jcs14l3?V$Bv`G3BC3$DN4y|GuBghcX>yZ0$A_G_138~3I17o@UPqH{GQpreld z>h4)e-cYt5xOiGLcnDl-tHu;A|G+!z2D|>+^l+73AmpAt4a|Ji$RByu1SE5lWYv{6 z9Jq=u$k+SCFa!B_#;P~G%-yRzqBH+w`cD9!}dCsUB}bSIgEOa zb%DyICY91rr~W++1-wn`vVS{owoUW3V4L?{oUyVCab*e4mf^p$TtUzW-uDpVD=aB;9lJGM5ju*P%}}o~upiOOYh>l>?HL z7TQo&ozR>4yrULTBKAu$=kJyJJz_hbWoq!>+?ucFv5q$W$MS7Zh~?X05#4olFVm~X z17ne1R}`Ulw!W4=?CsvC^mOCOD=Ov-jVRoA_kJ5tL~{4t`)%M5$?@G=1%*EFirc>| zgmY6sF<*r1n@j_FUUombT4p3u3X25sem|8>Kz`V>rvJsrt2}E0^5@1HtzI?Kr*OCp z9a*^oCXpa4Nc^d*2E!fYHiUHK>pdJRmoU1=tz}&%vMBgm#7i|+)qZAH*PEB^^+qZT zCJmG~E4fsD`>&)cUs;x<@-<{GCBy7Lhi~I@`|_5@GG9e!!!|CD_R@XjT&jdjE|uFi zQsq)5WKyYSWK!w!HZGNFLT0pL9X1k$X&Qb(iZrIr=eCi`ktylQk;$c+km*#{n)OVj zx~j`}i=&H?<64^FYQF|=&qS`SS>qnJ`m67{t1R{*-(xJ-IHmJ~AmpCkb9J2{r574k zG(ui5AV}$7f*|CESH&7BJ<7PE5%Qn`K}wTB5c1RkK}zopf{=F(2vXYQ`yQSMya6&t zvImkkd(0*w{}6%O>r)ENOb+Od3N&-Gb)0M#AaC)_OhcmBZ3`%cX7b~V(NWf*)u`#C zpEbIme`ufS(jK)Bw~kcaHbxT-%7ebmAXa@Tz@-S5pDLV_O|ssZv-IU^sa48LjZ)rxZK_|)=B%oBa&+NJ-(B*B0HYbvvMjoKL7!6S*l{10V^N1e zGbmkcO8*f_Let$&vQ3BAuW@r;)QPK&7m`r@dVIdV#5&q|6w9~q%U=EFJge8%O`g5h z`blv6)^2@DXBb!3*7J2!6n=iUej5ix^1|I(jnPH2VwR_-&A3t!5e98XeSKesdopzb zJkD|oS6MVep6%z5nV%TRRiq%V4N~a@A}1tAS?s>ju2K<_`J%ofbH084$sh-bkD@I~ z*)>Bh`nRs*f#b87fVg?9|- z^6ivdDqk&?bd_#EhYE+smLuEX`+b)AYy{%IEb+99Qm zYttcv8cEc;F3vUXQW%#x;=?rVT+q04L1T{5Fpcs%4;D-zT-(j>WsPxfrkdl=Qe5ND z(kQ4Zdg(ZyMhj>5xlndy-&yp%B-fSK=((J(gwnrUs$Q9_TTIsqsnqCVOygQwRE_v$ z+ajNFN}EVlEJzg%t1@NM3ttmxA~3Rk>UINoq;LH z?Uu)PF(^$LSGFOLCl3fxdUp_ne8h@aBc%h3D;gn}9uW&t+Sj-u2)W<$V!<>Pn#;NC zJzT%ZqcI7I{~GAMKBX^sCnq6s%L!82!8UmIE~2Yrj@y}E)1 zA(bPXxXNkl(C;SB6`KnU8_DVC%~JS<53prz@T%*U00TULlP3}(iK(_2)@=adZ#-b* zeQ1D_HXxfYR4jjFZU%QJu=seNTC&BkI|Xum0or3e!a^k86!D-zQ#J>XF%ZxMm54z$ z`Qq={)%$&H`n8RcI?{~BPTAD`>jFP!PL9R`H2vfxDLuyWqw0j-&CfonlTwqt{(f7% zvu|UsOz3`R&q&8owFMeGV|jSkTe3ZtZ{tC9m#p5yH~B!85+t9!Ti=)b5bL#ZNGd;V zH=lr-ToK9bc5BrQ?z@SYz9gUAgnQkU9*2`tEKL)F;7)y1y-4w z^4&y8l+5+JiJMtila+L(ncp4jRH%}B|wsJ3w6_Mo(QzlnLiG7C-=`L($U)i|)Aq?#UJ*DhGYA z=e@d0kx@CIIX{vE7@|kzQVf)rf}pkl!GBuFs2ns{s9gGI-!$~kWb%0v20u1@>OB*M zj*pj_Hn`Mvn}GSYA9geI#iecoV15??0}U{;+QRQ}{kR$Md2dLz!cpN}&F`h&|A{3Q z*qi$R&uZ4Uvg)<~`l&v!#{1C6d7aC^6j-!>p=nPhA4oh?vEY)U?8|`K<#o4X0j+5r zn%l-)P#!ehAv=M8UeKrXkC7xa!RsU`T@>{M^kv3#l9Zafu>0aVfa`7Ee7%UbW^H_l z<=c1^%eV2%zEJ2M6R!WAuV;eg=XY)F9}b}_fPiY~|}dqid+ znX&3!89C;e7R93Nbw>U&upqBDmQsR#iTMP7#$X4rF1SCh?K#0Tu|m_(0EuI@K}uA-P@G zOQn5GDpw4{T&VD!Fod|4W+1(%%>Y^*#VP5A1y1RFBCg9k)2VhVER^!#Dc9Y(P&e<` za^3O*E$ysQ-8j@zzvItRU8V97KX#9P{LZctFOaYLiTlWPJf*iAR|Fv+c1BORov{*mfE);nMJ;Zay3eb%zaukBhgwNoL*XeoVBs3euII&&!*E$<%o zP@!|`2D9z|*>$Y?n`-B+`V<#<{|<%3&JEHEy(C%gt(RxZ)fC}*5m_yH01Z0G=7mI#Y>ZrakkHZ${LU! zo6`eeXk0Vx?(UC2$A8xY@=jwpxF|jBP%j91tg)ORr4I!`$nOjYQu0`!~r61%s1_UYH83ZApba*+;O>S&{PQhZ$WDs z?kYwXJvy`m`AlQU1Ui91xL!)OZd|*AV=SU|m8bb*yk7a0ETf4DS!(_L0v{nCizJ~5 z3MWaa$u2ukuh+WswJTn=Vk;J@Z_wBi%foB3(GK2itvg>U1(S1kX+-ZrLsTR`u}h!Q z*NrRruZ^+#Z5vGdNfdH)aFe5?6%K1Ru(WnRpWY@Q5BIFeuN%oImf3mK#^Y9gTuwml z;8~N9I~uEA(o$fw%aV4PeU9mc6$jhOs|+kskuD0;9HhKk&1TY!@@SEyQd&?})x*sg zqzlGW)gw*)jvl2fMacIJ?8B+yLL=3l)`idWnIc;Xk5p&aho2fQ)Tyqv4;l5E#!KtF zRIcFQ=wgJpmQqeGmK9xq@9#F_cS=>IM|w}XkT|LBcKej@ zQ`T3IIOzl_;im{f;-oCsAaPQpAn{P7An{P7AP=|R6)DKr|I(svGlOhv4_%gbnJF|n z)>!zz&7jdN2K_M)*95@qYFbqcdY{k|ffWRsQ40(#r+(x*5cD`1_oZUkI#G8$yfyP?~^zjAu`XFxLaf51C3bnoc&Q1!^i+T%aPvwUl@} zBczxYT0fVbZ_o(?Ia0hd2^nX5hk5jG)`0Zbybd78C*21Abi2y33i7$V_{@&dD&vYE zThBNa>?N5b|pS zf)V8FB!Tiw4`mM$@YKv+pAz`V1{@OboFJv!Jmx(}z;l9>j`C3UAOX(_QrgBl-h%`@ zCrD{U5QGFgCrIg%AP5;l*>+J0$~lDn z8F^`7(H~sn1IV5=@K+|TsSx_FgNiiVRg5k=C5SmBby6BDx3dcy)AAsg5z(%R4jg_ESzWLJCuIbXZtRV%h)QOUYkzKxB82axl%QZPAp z=SK9F_P$MgsWS*)4j^A_O~1^WFah~_&zgL+4L(M( z%+5y|>$QGdPC&lZvnC-=GgiH%rNC&HCGDm5Ii?p@9BeChF|$ZTx_(V_kn*~wk~E_{ zS|q8I*S@Q*Cej6Cs_OM-#%UgSfyJW}0iA3nh6iA<>NSm*)_18~!NJkR2yrc?oX!aO>k~c>%LkCik=&$7$T-jW@Px=3Xj$8k;?DqS;5zuF z9r@7?_cgND+f~+#kUuq+3lmB=20_R(UKD>7jne0gD;gnh91x^*a}b35yQ5=`l>WuI zq7ic9C9&Xuqj4d1T0b*Cj`9BVAV2R}laP4t)^e1t4}y?jB5PGh0C9CGUFW@?gai;L zNa;lH^&}*KI6+D`1wqI|UmW1+^(h@>ph;qdjB#we1U2su^(b^9aZ(MGZ^oIc=XsaA zkU#dUX-NEbbtyf>J2wr9-%gMcuFG-}62F}wC0rLl$QXru#W>==G83)r9%G)r!>*bG zp}*pJudav}B0}Y$xk|eO{>GoK+_kp-h1T&-!o70HjMYNVKU-D(`&9ar6z0T z8(q<(s`IrrUK8WNTy2hZw6R>ivo-Jl>s)PT1PE5!?cAsIE}tuU^L0cNK78j^14zG{ zRaF@N@#mI3j<;&5EP?~Aziy%d& z)bAgqmX)OPO+!g4pWSjP$xshx?VPr}e#@7A!mSkUva9qlv-erw2jEn=f~Dogk$nzUDPTzQ|ZkkkT82Amp0|1Sx$f z2txk*fFPwizV4fbyvtawX-b=3;RPYLF_sgg^!^|S`Q-sYO3(U+*9bXjET@sukwFmh z=m9}W+yATA2>EzpIgOMa_)RYe`4D3{K}v@OLCCiZ2vS=69j_7cr^a#`DQ)##F9`Wp z#&Uv`9(R=&gxtwkPLR?bKk$N(2N=rd zX{7X6ALKnqf?euD-WtVyuTNW@>D=Po(|c2VWQRc|J6j zLDF@uE~UeLM=pb;pPV2ix=P+(0SWw0kkS#pGnPTVG#cRDJ|%iUG(rNu(@5z!-xk?Xh&({Vp| zRqKIPV#GRGM(QFzepQyX>|brzD=&pvc`11Is+yEt zm)jsJuYud60+ef3 z7oc3Tx&Y;x)deWmtiBsiu35c4p_F}X#T5D9J~hr9U_%U#Myn0($|5?2zEu9O>HL`2 z{d`DpmGHP_6=V5Vm%6#6X0ibPz!xLtKT@!9UQ043Kfu=IHIrre`@bAjr|^%)9I2iU z`Gr{SS5|n`SE9g$C`Pzr6E#K&CGjZr23Y1=@0EXQZ0YNXPm-uyAJ8)k?JER@Cmz) zR4W#K*415X*P(S!F@g7b!85L1b+Z+2^~_>?ja09`*fn#CUB$g$uKJl3e(sq=YQOgq zSNosrDz&d)b^p&f=B9QXVtI~X%sJRJ9%9##>PX0UgvQQV{UmFI9i~`t*6KoBpSAk) zd0d~hns_FZ>*|lS&?J;=Cc#VG)=Ub&^}&85BpIldW8=llSThMsrpB6i*|!~d9mU_;RTRj9DhM6L`z$zl6`3;L8+*kq=)nc&`K zouoWydehaW^jMp|R1%u*bdr<~SQEw#^dZJ`l9b*WNkYGGK$6n;B1!0L2P7#y*tTD4 zCp0@^*E*%;kt8(RH77~woJbP-(|(($7*o12l7zlvK$6lXeEZ=5?#qw>& zSuEdXw8ipm##}7lX5_{4ZN^_L-)0oX@@>XqEZ=5CK7bMF?kMZO^Z9??V^VU*x8yfi zZJuj8i?KeD+H1!9lrHusfW0(C4+kvw6%Pl?G)C7~HgBKh*L4rDS@NoWRc|PG3dp2^QX5MGA6nANezoha0PYN+DgYi#FEVFS5827GVVV!eX%vTEb#~xPz?- zgym5%!g<5l=ca~%J|K$I+#ymPn+|TjlpZAQRJg$MwEUf?Txy@JuX0_IG@m}~2RRlN zTF!MYT)f!JVS{M(Z(@aq_43){hP60SZDNaG@=&Mx>&%OiRBl&EDt{~>muf;}tYBZ> z^4Ow9UJid^MBw3LGa`BJU0OgSm&)yuZ~Pg$s)R@? z)r?3gJq!`#xW(B z0wTFo36Wf?gh(pYj7Tay3=!nG#)!aUuhNW2zIVwV$sDP2sS+Z&R0)w(su__~dKeVu@xl|J(V+H&2mUV@OA6#QZ;IYSULZnl%b!4AieyK<7i%M^adNTE|L2}N8{h&O5Q(_642sT(EE;{)yhg!@xtFE9Y!Y zv&0^%IwU^sTu2&gZf76z&{Zv>RLSl3Eai{m)5;UTpGHz~*rzo=Yab`J=^Kr-*dBta zIAXl%lytO#zcXoXiF!-`NmvV;=Pp@vx5p@V{oZaMV+hgTPQWUP={ zX?jrjKie5K!$H2FLxjFKhV#m826>20xUMnMf$^ENl|08bnMlOw17bk0yt_rvpT|fl zzPy#^lU!Y|Y&#jCZgqa*DV>(Hd~{K!H#AI7a|w~hZn{rzL`&NcPYUjO&MO}ul-B)} zQJwR;`bfjpyGUuweRxP|-a$(9{!yBDkJ3iXn>a`Lyl<3Nn@hcCl+QaxX?c7o4mT@2 zwP}3pXx%?1zvS`qSvTm%W$ug4VA!`rKk!?kANnoP5B`=&@G$&aqVJnt<6EiE#lNzQ zbA8N9>%6F@xuxZvl$MGav}qn}Oes-Sm>y^;YjsRr1=CpbNc-?9cCAIED)~%Hb{k^S zn*hEzk}Bpj&0707v8{Q%k@~S_p;@o#kY-h}!%fC^AM}A4gjNi zKHFjjHsqhFKKY-$a4MSeu&fR6bkZA0v+`vd-K_vBoRk=^IwlfN0}kk+D?Sz+#*(mdgg?r9w}-g8RpIz@Z8Y2DqKqP@#h z-l!=Whbf=;m(q4;+Aaf4CH}E{E03-7UEXNtSR6#=Xo)^|v_zjhTB6S%Es-!IgS5oK z$kue~Td7axU$tcQwV1Tldr?jE<07*a6J68X*>YUUbrq)PTGo3_%zg#aSaY_0c)ndV z(n_V8<~qxlH^#g<0UW*VOvcz7g~LF02tNt2^%x8A^*&q&$gO2KAW`x{(90INV771`qnBlYA^N;%%dlB zdJ^toley=sG(BkVlPz)?3^D-|pASxR@(T>|9WCMdfRVnNxcHLRLH2bk;UYrc8^d|! zeJy@Yig7fD$=s{kPJJjm&&eDe_vB=Lgc;X;GGBUAPv+irI%d4*l-6}J_iod=yEB=4 zm#Mr_lQ|AkzCAyg-|Ve&O35elzj1k^onr|nGDl1FxuYfe?9mc^{%DDW85yJ{4(2eO z%zZ2M$^2uMtUex-RxyV)&BaA#t1vCG9G7xkh3S2k^}ZalU%@oiTxcI&YFCYCZ=aT5 zXes6IV&0qpzRpN;?`%i)>u0AK1B@~)yu(Oak~rV0+)B3(N91a)beyprpJV~4Ib=Ey zdvltZwEF4-FskQMHfCT${+Ty|y*X`6XKjF=nDhqHta!?|R+&?Kv3Fn=l}4PB)0c1$ zo6bF7rRhO?kGI%mILH)CgdUz|<)<0sOVh&DH`1397vGxRJAQR}B{6zM4Cs}_&sU-k z=P;dnb=&D2h37e)qvM{O&M~t4bbkFeZsNVUcb$$I?>VJ)ozA`6wC?Uq=iX&1Z`5>- z!<28&PvHK7uH`-a2a3XWGM4vlaqR$>J(dUnrNSKj9TH;_1)9Ku|QlHM> zWy$J2F=-X^YtvjDhu_42UinaqpU1{Hn!|K1 zD?z7lJE5cUJSTKU(w>~q87B8PGh02ez56WxrJH(|FFmS*$vaeOUFUi4O|82-^St+@ z%JYs?+Nil7H!9zrpZjn2q58GUy^VZDa6&PX<<>iaNAhWBZ=ZfzqEA3A(Wju6=#x-O z9880{BJi!$R|Ma+eD}SW_lhaHX|64jV}K zdPU&5hph-aU#00mdskcRG8|+UCqj?6h!xT+4f1v@A$`h7-%VV+9_xtsN}`p-=zU{A zuOxoHAALBd6@gc{ooP{d*DHeZO;z&T8FLt^qm_y3)nx*2qG~zIS5S#e|5#Yd$@A1a z7uFJS$gY2Gc_%8(du-SPcFK3N54-s=kHe?B)YDGX1Rlw!CHnN!5`6+{ zi9Q9jM1qeb)DnH~_8Q+xeMN9_k@t!zS~lanZZBrS3e$o1VM>=3rlT!!u80Y=U>a-w z!ajVgU2D;+_U>md@Vuj4W!eSaJ-yrWn(B&Rr=@EcdzIPcZ*hEX{p-D{<7 zCjOgoR+s=%bI6JyoDtB>{ol zdN1}4%%fKX^d;QGRs^1}()6Ict1Q474l>shp~uB=Udd#@8!v_H0DE)f1MDg!UU|uj zB!xtbJ}n0H$|;MVXU902(~7_=+)jX~yeC%#sD6{L2p(aM*!7CwV>iK5dQIa!s)NZp zRA~f3{wRId6@hoA%G=W`0`Es{qqZXOUR1u_T@l>u!)`vzR|HRSsVB_dmUKuyEs@A0 z{j@}%fLfwYK`oKsBMG&{!8E8Pq;suod7EZgk@kuix@n$ZOlQX2STMy^d;qs%OyHxh5g ztvIaLbV&CqewE33vRy?Mkcnc*iXfa3(9E-}zPbR6>iMjX8Q742ruyW6oDtB*8Ce_P zmn6M`G%KF+tyQMwUhEy1N3RIzOSp%v2s~eiFP&c0 zJhNHyyMv0?NkgX|*YK;Ql=S*b%K_g?Z|Og~_TuuhXV^fVp1<(;KK4@K?DhF)&+vBP z?DhF)&s1KYfA&n}_4#Mdumk--dVT)cGrT^3L3(|D`MTxOykIIurX`EKMB7iN`gQgV zeuv!>{p8saamS|Qj_n(82XCotIdMn&=ASg=x85x$mZw7u;bg?8C5sUKT-#Rn6KhM% zJ6rJ_e6+C^2pel}u-`aS@zKT@GMSGy&QyG~F@{X$qm45aA8m}$k@;xjOvOhVXDUA0 zSbJT4nSs{RV|LLs>RV&wK%$}7Drdr;^?Yc99>n5qpNChRNfPrgO9GL`RIz8kFKcs=!%+; zuBiFwikgqEsQKuMnvbri`RIz8kFKcssC<%S4nEpZ^U;o)k9O32w4>&u9W@{AsQG9| z%||P1MbUH&Hi z(&l=8e3M@T5-t`qd&O7nt|t+nU`rX{8a*GQ^*y83>q@QHm0GVWwO)tTr$?>Vm0GVu z>sv&vi|-73*QQnDz;8RDC~r)W<;Qg~oCbb$$?M;8dJ9@2HsI!#h|2rL7Z^)JxO&$= zy40-)4vamp7Q<59to0Vit5>}KLPGm9Vh^k>dtfc*@awCU*SM5D;Em`~Cb(Dz%g^Lu z8hs`tmcaZlu8@G-#nWFRTv?nc38P=k2&wec3I-digRFnp0z=^nv?cC{m@o?%CV7kqFX5&YoO7lZdX^ggu zvtI>bU^OvaodUeIktF|qaRY@H+K=C6DB4#n>2K7G>y7NW zhEpz$&>H`ExFxQwfp2RxQ55*Eku(kbepVBFPMpf7fd^d}8W?L%2ClJql`h^iLmcM= z$_KBUZV|g*ijSq93?y{r@U>x6M+~c31nQx7ej=IxU!0Cqu8T`gCJiy4*nN$~t|$Wh zWF(zTG&2dec2Rh24Do3ovxO)EWL}U4fd6O})dcWYk}%-YV$7cmWEiMJ7zZ~*wrLmZf}D@v;{I&TH6^cjDnWvhk*)Y9DLJ$s6$i%@^(dKV`x0& zTg1{dkRJn-nt6CDwgX-rE^-*P%Y{wgQ{I6;2FeGra0h=kj*2zFOCxC|@E4J^26$s8 z4E!f?>`VYZ9mmcZU~QOO9CsOOfZsQg1`jx`yw)(97&`KZ86zj9_%w1jRTH*R8UCy+ z!-HQKhsgvZ=lvNQLx*vo`hpn<(kk$EG5%Kq85+U`WbLHFz~{&KUjt-lC>xl8AY&iM z3?dCMCYUXR#E>BVg#vYXcqWF{%J?_O=!0`8MaH!BBS&8A)Ab|9* z_z3v1Y~X``5(oY|;OK~0S4PCTG9ro-l)bc@^|wF$Uo|3#2ac}PBj6KLJOBv-Ia~tH zJs#GV@vy#IJQQbW^NEK~$9Px|BnIm7u)d6kc-lq~XiYF%V2KeRJ+4Q076+p{e|_2c z>&wnBPWbkgP9J=acfLiSvma+2t4f18UK?vx)3dD7mCY~6l~yjRSF@~Uy&&tp3*y}q zmepFfYrg)Tb=K$}TFvmp-`WKD_Hp2?uKB+7>S{l7_EEyn^<(Z~YU1g$GEalq1dTPT zfG5~8Pu#U-hC*#%F@LIkj3RbHA`i%_PUKxu9KF}OZdIl0w(M5dG1amu5&eK{*G0eU zHn3S4-NmcuV(!kX8Q|2#tAMP*T9;B7HRf7f7<}nQ^Kqgy z-+S$k#@Ci`fzhUNy0mLnxFS2^1Ji->Owm&o6ldzH8!0^x&AE0f$9$m`dX}!!R>1UK z;G{Gv4+PFp{YxilJMS~me)8FxY}{?_2jB54&c zEul}oz$V$t;$(XgkjYlo5$VA|&PT);QZVZ=IoAXZ99FY}=EkK|1v0^gn^<%*6KdNq z1@2}_Z6K#_p*AJ%W(p&aGr7P>iMyG?2qfPJMo!wen<_`iy_h*_Dq`&7f5pXX1EGX+D@!>-ve;K-Rln0U`PJg+%k* z<`NPRjU=0)5cjWy3y6-DdpSWxRQsElqt}#rtU-^|XmLD_2N1L&3Y-Aa0dn46njdd9 zB$bOcID7%s=xtj`Gj^t}y@1FH7^!nBUl9{UiS_)NK^D!n=(U<7rnG&IjzCNym zDmwV65$eIcJ~6`$M4=wNyie)97JWiJW_h2|M-%nf<$X$=JPYq}%lnjA8VU7&%i}Fc zqEV>g2TH`IP(?EznSn}Na?lYZaK>@6Eq#P4`cisXqKa*lK9;DWFC|V!M1t7nBR1#| zqBQ-hH}Hu)o+Obez^5T0r8)_H-lCOT>toFnD+TTc3n}q?M1AhoOL7M$k@3boPqheF z*-GsOv~P~HVVb=pP5~1@nwPf~F9D;9e0Ok(Z&+!*neb4AQH$))m}czdS;mjG{IlP8 zhW}&E;^UPZK01HXtK{Y|wkhrDOzq<&w02YF_+!qn;s-8 za}4}EuT*(>eAp=&RY^hZ1F|&6O|6#blTJ${&Y0y}qMzhjB6BTB2XUwM4&kYl(gaY>D2HU45h*HSZ#&c@HVgJ4k8XKT7lNQJVLT(!6t&=6$0y z?;53f&nV41MrqzJd>z}7 zmgqyPCHmNEi9Wbm;{2TP`;H^rpzV4uD9t-TY2F7)^Da=D_dq?z_;Apgzt55M`}9Ds zIod`Ik26)i5LX{HRQ#VlYB=Mb=Vaw$rkgYVr^SqSg6g+tM~x4M|IHo<`_&U{b|o;>vf+!L*|ZR}xzexE1DC3t~@)yfHqP7A(fzT@{I z^3S~UYO-Y4BIj&gN}&4snr^%<-KJ&jvj|s-0mA|I^OwX$4IOueY)9vmFq>k~sl9-bnf_ zCRDtA{9@OcgL1Ocm(5;mlubI->0KdVAI1m?Q&3w-nb;QU&_gcA_4!a|xX@t!Sr=I{ z;N@W5O9@n8Uym-mE)preawT}QCfc)9%Qf|T;{3Bh3%hxOJZ@Kr&O>irAfH47pp7m`>uv3|D+X~6o)V@QzQC1^rl+`s^!HT+VUKi~Fbm1$=^7UaVe<6K+ z*w@q){#JWJk%yM$+@7rs&)imy@=5+>?f7+2zR^5~?-zRgI8Yza3J+86Ml0(7vV~Jh zFP!4_)AD=Fe^p};6*}>+cirZ=A;`}qO#lq}{ zZ1@bx+(ZE_(`tx>bWP8hGBBI%s+17(<$iCgzLdU7LGS{r&>)%#X+lh;;`;(bGv(|PR`EUI}HtvY+J zRSk*r_Yv*R*Bf2~IUhw7rVKeUMdwl8KvW)QzE32UgoHG1=Z9XUL>oetoBMT}z1*5q zImhyqt4CYD-I4k?o;zq+>I2`UHX`KvVxCD8rvBeFJcydTDuL&vz8}BHeKJopWbYo} zegR+dmx&CRzVlqHjr6OJ`ajL`1rz2J+UAZ2bQIwJ5OlPlN$6@?{^#4xz5yZglW$c# zD^%ZRp!yaAHE&C?-v1BJ0AT6w$-z1aH_fN)`LylvIkh#9{ajcvz0|If*y&B2TFLb) z4qqV*AA5<=TMe>*YBGY?yo9R3524I^(3uHnP_oVg|xA+z`(>OkvMg zX?DC>ZTrOM#9 zIZP&PoO`9N-<#%xc9q*Fz=cpnI5-aM30$CO2c*dNol?x z^ax(Ful^zTqnTVVZOQkSfi#&n|4r0rCcb0v$BEQMA$h5gY;;hC%DFlB$V>z$6CYBT zD9c#62{&JfGHmWNY}m-6T)wn9U&)fAesb?Z+wtb(<}e&MYExBmi_~jMsoKTJrT?TW z>B6kr+DNzw{<-dkaIAWpUx%y2Jn)PgA*}_T8A&UFFZpfc0=~;gAtzC~Dlr0Y7+|Dy z;P0YD;HQlgBvN{b4G~$X08)v|urNt@jwgqZ!E( zk3eh>jF`M_EqzkB62SASc;; zrh^gu^*G0^16~i3Geb zl2$TWE;W)0`;FnFYz|b~lWdyXU{|HR)bRH+8hA^b?bdz7;1?4KxXh+2l?HxboWfQB zPmH8>z|*ptU2>6~@a|Q65SxrV5<3ef@`2@C*w%P1-eVn+~5qrnSd174|WyRsu zB6~!jON0?wXJ?TGPBAmxEoP>D_Ed+LF*8lfd?*IU^i35YZ-~(_O@I&qc{I@9vXKYU zx5@^lbA=69>*v?R9-O9sznMs+sMM*`bn5!p&(lD%iKJ$>0liaA9ff*UX24plS8~C*7{xv{+u54gNhDaj;67tGM z%#Z3OeMuxQrm{XME_Bi{Sto%Xkva)T&&b1c7tB%^)lDs9myS}Sd`~IOcU3FUcUDXE z-PIDibXd#SrOR4II*kreCFk2i?F%QhPqHLZbWuy7pZ+TAC-CD^KLM|cY-cv$SN$d| znZ$~7XDQH!`g9X`RDUYpp6JfI$KCt{Fs)?HY`fk(?D*JJwOFy>qy7XkrxF`Fvef6f?-Q-#K*m*+$ecI3Z6#RkIr@)t5 zW|jMHz^t3Mbn0fQdsBC^G(i`?AP&k^KsJry{H?R}IzurZmOqV~f(hU)g)AJvSx28YvZF_>Qq{eq7C&TM zpUzj3%=bke!CMqOk8(Au%wI&Gvs_ z_JP6%WZj_3?& z1xzOs%lb^n4?57ANX)fNm3I?unHHD z8A7;##H{!TSj$?R%BvdSbkI2QK#Oh;97P(C$j&30!$+loiCL)%OyN7xC46tAfw+(C z6+@T?|C*O$jP7!$-!z2r*Rn7Me?NsWkl2;{2jpy1?E`a_@!JTeRObrDh;eFExRCdH^uJs;NHOl}5NfGz)j|q|qcCfrPzi3?#%=8km3ig(hs)C3atsxFvJE^NRw1lBMFIJ4E7V2-y` zHTNfPLTt(;+3ooDfI(T==?i0I&xF&_@%V~Wn;HjBA$D{n#Ey<3cB`yw!A$1z`inTR zb9AU}fKz`TJ?~Sh+YNdvn?CoXxAJFvIP}9)HLvCTet_nmF;MZG$^zrXoF5tlIU)*Gp+$Ev0#_l;)LEn%9Y2>Pq+CQvN@LPQ7N8bu?$%($VJ)?P!>H z-O1#G`FEXfYnY3COLOgxo4TD|bFR6V!%1=R+lIOr=3Tp(!@&8w*ta#z#lEGvy7;DU zN1b_rIhhlqTQnOk=*73}Ft#}S%igl%hv`@Y^T%yTJd(M6rg*&F?S_A&JXZMsC#}hW zJm@*z%xrJoX`izymnHrJYniR6>}pt)KRB(^Pd7-Y$X4wrTN86wAtctu&q&KWqr_K~b% zp1Y;R67IU$b9vm2in--Cdv3&N)w`@5PcQ`Kbs{_fL)NIgVWho38#@6RJp3-t9|Duu z_#8YZ9l}LRJZ&l@U}`)*c*+eG;qp6oAw_L6@O73R!mh6M0`Zxw0YK|K5E{v?A04?p>VB z2C6@;3KD#Ky7uvH$+?!VEF@o3_efqJnW!-q36;59@8bEIxlg=^{4=jbP1Y!{`1*RY z8C^K2>So2*cx9R8#p};fHBGn0S8Z+NQfu)ZLg(fL6*<+byz*S?J>tXLE3o(FiR5c)n}^uP z)Wkkt9eNiT!9p*gZntXhb&$C5m37d?E$ z2o`z?!|nDu$g0Fw7E-NcwEpvG^OPQBy+4=@4H3zEh+qRX$m#O z?sgA^KGvg>v2o;MfgZ!rz=`G~xxaA1EGN_th|ix*0UsXE*M*Pgm@vMr%soS{+KTt6 zoZ7S`TJPHP{y3c;L*XZxcF@aql|rk;Rp=crJ5askdQS!~BX?fD^r{At3l<>^7wPlQ zbi$g{KR`U7Z1e!vT2E**Q`Yx1f%j+znb2#hdKtk_UP9e_Ar`!ZIT%_~Xi0-PbhAwV z^zp5toaAK$cX$cIo#gA+Evk8=Y48F`Q^xA%S(Lt8^v6j+ z0>9;}i5!-Nk%@p&4)HRA>0ZKchcu0su-j(gA0`ob9QOw{KCZN@kZKNjw|z`a45vE% z484ntV7iwu+#z0vuG*tBEr}b?n=KV&CWURdDV}qf%AT*<@Ys0ezJ%8m6!t>|)p zq20JY(QapO$3xD;f!P+TgE-Bz^Q-CY)bhk%hn%^^uJWCE;9Z{@J__I0rgVZ)g%No8 z({e^i4=}1Q0{?MA=G71G5?0FB#Zybt!~Kff|7iIe%NH7#U~-47Fz&P< zW{;VeDVFuo^FL!&Sk?#cG+L-lY5CK`1f}hOA853|N$HG?6a3-E zl&Y&1_kR~Z%gvaxc*`5PdamBiWpwd*&fmrJ zIe!=b=lorIA?NSX7de0I3Ilt`*-!|I-T$Ndge8yk^&{`qr*u$UAWY4-gGAtc?$z(o zHNtuLz4~1`ML74pSHDYl2?89A4t{dRg(8Y3<1+2^eMzc6ie5W?UlRS(t=V34dhs^crumS4`kAO)@vVWe z26f54`UJgKuEuq2C$3{Uah2zmWs5ShkJ}!e%q?UttXNUDTylxb)nwSx=5nZ&FTNRT zO0Jq`O0H7Bnyi{% zYMv>%YM$|2qdnuf>z?skqdYU-a0v1BxaKaCdE#O<-fK$F)VNB|)VNB|lw6}c6SC(e zX2Iol9dDkws88Y7MwF9MAhzt?yr4Peh$X)}=x&ROm{7@|x2n{WpR5ET;tna5kDp{Y zU4$Na_*iqmZ404tTw${*3u--USy}LnFM*G1b$#OIj>p($;Zt^%13BRGXXXcTlukCP zFal=>7%9CdF#`YUS-C_?&oHV;1b*h(IipkA6-x`Iu;8vy@(Li0st>37lwO+{f&Y@} zI@PE22~$jt_kg*sBaio@-lfKqXpEP`aT=xLqbnzYi=xJBffy6&Qkss8lR!+AV>}@C zg}Rh5Q5b=_wUuMMxRHFB#S_YDEP|JsN_r57nkb@t;CE(xUZq-W_u`j9yR?VFOn~by za6zBave@s-;t2gckxZm-^D|V^8=1_yfM;8w~6!2-fugyPibjPj#GQm zVG@$(9@#a3UUFo=i<3m=#v}V(+_R+JJu-BT%z~ecRT~haLNd-i5j?>h$Am3M2`@L& zdC{j6!1o)eJxZW3W{Sxn!Py2$-Xe{0`frhI0(e6tO%si{MPvc7r)@LpZ6KUN(B-F^ zdV0EmK`+T@%zYcJ;rc1W|Fchj9@VRyLZC2-q}SAT2PIc+-&u0i_FyGfxdt9j5nz3q6-id&Dm_!km0 ziB_6Ag{cQc6;=SzPIaB?Q+jP;1b!zoYN}7^X{MO$T7bE(BX%uuMP2KhNi?QARK3YQ zrLD1ZCV_N^Y$$+qhdg`$#J(Vo5+>@d#jM1>z(@%bg%OxrTiLawb*rh2CK|ZlyI7;T zYww|YCqex#61g|Jl{N`{RSqyWidClAO`!fvDcTy@%ar)5n3C(Jth;aO=&+Hpvnn8 zIA#;&q%@szf*&`)Nr~96#ay;OiMx|7Hp}!7cPIE^u9oLAy4audckx2b-^CXLI}vWP z%Jalc0GAu7-6BwUcjTKU z!f=4>E`ZoGVs}ADe$9;0T?5H)V|3B!`?4t5%NnllE?#S&o*&h#>@HB4G*I7Nlw7qn zbjek&6vvv9t6V9TTr$ko58qvsGRu}17A=d+p=;=|rX2jW-9^b&^GwNA>Q`&A<{2+* zv}ZhbeRtuxMtNquVI4M^g(>5ZYvM{Nt@KQdtMp8btMp9CHOe!RU~ND#q3Eivw!46j zYi)wV>ijzKt?(V=ciB}|?!ZI79X<+8QaawK!U)_pz)0yUi4nN)JGn$k`x;dw0w)F- zDLpzd0?!{{%ni$NY2*|}ellvg0*C=>_f($}Ey;Ev7oB68d200KB=A$QnQ0(`!#bT( zYNmL?WUSZIZ(z&ctTnL7q-tk_-yUgaHVDQ4$_H-DbGmY;C*B-sW#GzvggLY>3+=75 zU7BwhyR_flM_3$wSOoijXMRw-z{II68-6+7rFN{mV0lJ`9|!2{XP4X4mPT+;^wQe2>jc7 z_PZ#%NOZ)JwQd{L8SUuE{#k8`KQS6G0ep^;If@@jgg7RVi%T9={0bXud7Wqg)s5Tn}13k{Bk-&NMoQ--M&P9bjFiUj650`oz~hV*bfom~#0dQK z03+59zm|TP!Y}(q53B&*Gjr8cpVG035r`L6->E*O&n8A7UJQ(sJ{}EQ0n7~>a(`_s+e*g&9bbsXam>{c51tL7F>9(aHjYdJv9kFCb#(V@leH!PV$ zXQ9voVngzcFT*D%5$O2yj1By|#0EUX+^^q2>7w?6bTk}Yv{%*?nAn%O|0m;dB%o*R z%xkjRU=$9uDUEXH!t4P9JcTaW8W_FuWfZizYM0CCqT`};uq<6VN=t%H?7#ax`;-og z-8VH~l||qk?%D66>|&W#QE@u!BI0XQXS6Hglx zpWT$^bD7dmmvp5x-%iuK!!%3E6q%xF&N8M~Mav4Nv8Hc5Nw$(H)HgRSZysX?xWbZP zuKx9AZcWv^E+bCQb1*&Ct(~Eyc2nKumAd6psow6gO5JiXR;w!``;MIDdEN8RyzhF= zN#BNcJEnAy#wvWIerXbz&jMbJrf5Js(0P4% z$+|Fyowhz)CE$Q>Fj8<4rMD$U;Qo)vkB%ta%cvp|_>2KYN~b4A;5!Ex3yU2A8~!?~ zHU&g$wPC7H3B_g43`Fa|Na>iU+7uA210$s~6C*IUVaS3{>_GQ_w|prrQ+kb2C7S1}vN-hh_vm*~R!^x=vF4ajok4IOYhC*QyGo*azQNZd67al8 zS^=byN>bKDO29H?d(Ct9#WqH#($FWrzSdf!DQN;otJUL&<{;~ZH8JYT26~Z;@lgA{ z_ZnAa#1*n6?ml|y(8HDsO)okvWcA#1#l6LzuV(G|61ce5X1=j8vdMnt)S9(p)tuw? zY6@9%ndG)u`zM|nCpqAmMhfnrbar9{{`UYQrCU8VN(BCuk%B}@D-t8{r2~wG#g2dt zkBF*G0ns{4Nt94r(gF~z10$saqH0q>v<{4v9-SD0xedc7IduPg9Lkfxk4JN+fuGDg zJ=v#3OCu(^OHDlHYEXjDH=!ENh`cVN;fxoVjkSQzCpp@hiZYhE_&q?)O@weWpvSTaFQFPHr#sxuh2x3jLjLmV^{rx<*8A^|r>(h4Ar44LEzSca@lXxPT+95%_F zZmrRjGy$a5TH5b5H`oY!K#cm@BnKDcp_cZOti)BDYgSt?yg5dFZIXkF z@lc=SO0LR?i!CBc;;uh@lDm;8F#|(Zr%Sl@7JI&$wc|_R;#!~N$R?B4X3g5MYR*BQ zcpdYy<}%4$XYHS}HtxHC|6-)z4oce+Bk*WD3k!^t9u*JZRsvr&z)0z}i4pjP0mf+Q z5P%IYkE%@p(K<{?lu%qIIUrgGMoQCBwJ9K42S!S7NQ}VThT)SOx-W{lPXd1(Nz=gJ z8c7?U>{Ftp5tH0ORuOYGD8WCp&orD7xy!RFceK0*BS#{fZ zpHk9bSv2Zzv(~_PJJhB$O0Rs9>!MdaLCsgYTt*ii2Pe5vTD~cE|K3kMqEG3AMwMuu zugc=kwMX>3D65kkD%QGfRA(@JA8lQ`#;!7vyvg7P6AAd~NLm4;ks*^D0n3op2@TsA zox>)%4_Rw8B~1WnwU+jK&Hb$xUJ#?cHp#)oc&MfQBr9=MMqF$WE{VH$4WHyLH@)aI zO(B*0bc;P-&D!xLaB;0qa%7X`=G2o=O*|tNThVNQDssDK0fQKsXnEr#!j6A(z#L>NY92wD7|PA-8T*V$l_cZ zO5ZW6NCd9iD`%ucURbC&NPr<3dR({vdefXqi51b zkBXk`6F~Qj0W=BR6r*JgkU$D`DeWIaV-1k53yhRD$BtYBq@MyKCAvy}nFxsc10yAR zKp26zKQL1ISnP~7K-?b~DbWKW5tw&I<>|caF|WandZGR(ikY;uz}K6_WhuYxE%K> zZO}1t(=Geb`rv0Bowl>9({|2OoVIhO;Bh|*J=8@fJ|8LNh4(2OwUFL`j0nz z{jP{p@927Y!sJfJMEF=Bew5Mj#Tf?UF*k-OvL&)~xy%+cE%9nA9Gph#7iW$f3-i%= zc5OMoZ-uMvI@UZE_}iTCxL&CIPj+o9-`|GeOYGVbKVpUZEC@AP;>)e@;hgv*D_oxw zkFq5Hf9={DQ-~ z$>j!rVAmm?Ki1saI^xe#?`)sxTjBgjtc1>zQk4!AM)LiB9YREtC-?zIlN}Fmy^+NB z3uY<&Hig&L8N%x#(^Un6vyi)BmI9%tjNsW6hFfDoWYMOKgyw53k}G}bmvfu)NwGJ6v0N~=Wr)|q-RJ>CN1v=l42_n|iOC47LZQZl%#5Xi4`#McDs z3DU6tMH@nw9hz!R^sTUllm@18Iof#pc%RZ13j*b&yT4|sL}_4_D4{l`qpTm46Z}A< z1x`w5WSn5SIB-(>f~6;w3I0ah8mR7+Zefc|Ry61hZBR zoRof*ae^0G;tZUW{*O^rPcV5ma8eo-g<9JOA-|atU#O^y<6-~rM$E|BLj2n5d?P29 z(ItLz{w`6J^LL4*oWDy%<@{aZD(CMKT{(Z37|Z#)L|V>2-+1HKaO{_uyAx zjEko&opY9AQjyxvT-vAfv$zkQ>JoTT`7f9DyM&x@9=5dKCD?>>a%tDZ^%qOKCawo9 z?RN<+Y5jgn`(1)cIFDM|?-EYJdF0amd;_WWn;=c|2s;(wDpMzr!w>mQ`y1?_;CPUkAJfE!{wtOIT~(s(m7R&2*bnqN8yiIqcR*wd+2Qsb&UYvfy$+;YOO?;9_y=vTJ9P+ob4 zRIVa5zWW9ms|@+Q%}bZEF{qYAbwPb6cUI{b*bN&ele( zm3qx_m3}R`YPObKwcht!qdnredrjH0dIUbMxksR3<7khRvw8U|3S&*lRq9pas(HlA z8toC!J;DDBB4$0#hnS|ZDQmVzyj)i*<}C9?cuH{TM=L#4_g=4gfW1iMp};+j_<_GU6F=Yv2X`Oh2mU5a`~aVF?KQsDUh~`o`7~X3*anC@k+Q`}AA)g^o7L5&8L0i zS^Y}xqb!ei^Hx68BIvO(l8X0Z_qMshxhH^hB?&>2ATkj&JF{j}nrFjRnH0K|sdG{!d z`4I0Y%{xbFqvl9lqkP^oO7o6Un)gdM|MAqO@v)-=yVfF7?fpAT6K{%1ZvuFJB-J!+USJ<5w)Gz}(uJ{Rp;@o#kY-h}<4wk@ zBnwD_9x@XzY-eJcIo0Z`1Hh=B&$gI>4f$uPPyQ!ALEiq+#uKwPz-J`AfiyeTtoN-6 zDQ`e=FZK=0qi14z67FF$vFEEaJ*diw7O@NlnPZ911Ji^`+U7Y9;hMH5Azo%zA@Lx` zMTta&K0b!?%8Sf*S4AIoo{7D(?G%N&yEzk+G+LRcJwdzS(@gAr zq(j5INNIFw*O?gqXkG6frFEU1y>GN`ZFcsaQ9kb&r45F2W9tS_ZJIxJzvMIVIydOs z36daT*tbNYgn{1@{m^fTe(<+M0)^q<5`Eu{HNKVlO#Bo}D^HE-rI>)4W`lj0(o%(K zt1+cSRbhI9rK}gn)KxHzHP5vVc}lAmk!tUOb~on`yUM;8cn>4VzIc0eU)(bW7$v7a z&`1wY;=EUTO@~CQmA+zm`1>&*PXI~LBj;k8xzg&Z3nDiC^7$4sup$4<8^K&m8`orQ zfPa(p2I4XCly9vvA@*YLz&v^`rZ3?hHWz!oO4ItwJ3N=jbB8jK5|`v=A$iYe*+0Ix zsCi~1Ki6G6m$(;>vsJZX2qXdXDY5MAEg}Tx=MI$uZ5Qo%kbJhQ}O2Z zT6k@bF3!Sh`wTA5!fShcA~p-J?X~dQK2veW_F8ytulcCV?}I+VGe7@Ln62d;jez12 zb|GN_K_VoE2M?PI$v@94B%bEI&K@)ulJ7_%br}IDI`9a-S5?N-7h`V?JZbvzHdrwa0sd-=N}>Yp)DjoZwQIZ$*>j@0mYye65+&< z77|I1!$KkX;VdLSR|v^RjF6JG0m&hFv(vs`OKj*$=sm@3R=GbYPlONs`kQZvGERPx zHL8t)&x>F5T?fo{qBGuTJ)l*=?=YG?<3DzX;2#B!W^kIFyB}Z`+*Cy zyF%c7(jA*S80=?k;1rPS%7C2k0jYWr1zg)(I2uE3xaE62IEG(|r0>|WPvwKJjAuX- zz*ok}X&vwbM$($#yW7`i#6!TBM$&5FD=ktb2k)5q`^xwsR@3~q4tP!s)zv`Ki-_AA z6Y#-V{1U7mh?~0Az->lqrvn0*Xl?Z)Tz?v)dUb^H`xa+5J~kzSeQ1hPh|GV?q7}^7 z!-UNTtB{D*N2TXofhpOoCVJmt&rC{1AVECVtR{HRwy13F^f9QfMj!~EXpa*~U0`}h zLY(fy%yw`gz4jGi(A*gIb;6WB{!UiNcDw~f$r4fQ(jFGym z556pln*i35=d!6|{R z_rWXjiCqF!NIp#4+wXZe=6HaakYtUnYJh*6q6kRn$if;(&eNJcy(x|SmO^H_43Fti z;jujS=QOZuc+~oRRFA5{WtUErT^e5;K|hK|fOMk@1E(&XF1xgNXGCS+(mu-MGfvx; z!>30&_trM{RUt4_)>v~g@SlxMvgRc-6lzI=F3r1_IZNaL>2XcCqp}23mQ)3jI9gRk z#YUX5nv)~6aFM!SoY~h3dpckk@9F{{9ZF-wr^)GLAd{4`feD?~UJAsHGWwutjUy8< zb%_IkB!}vIfGh*tVB>p579M_RcC}CW1`>-D;&(;;2d+$*ZqD=of5d3I>M*z{ZU;^Q z9-h`+vQV-qEQMb=A*s5|K7Xjtpzl=|FkLU^0{=VC8K(eQhf5G_ona-uJgs@Q&Ja4J z9c{yhkkW{t6fR{q%GWn-5V?K}U;Hi35L7OG@YZbY0H$B$p!ve_{;0%27EpNdk#sVUSx&Zk z-z{d6lSo)BZRAXhsgN~^R0IxeuGxyD)9MxMhFNNgH1-ZG9E9Z84MHlH4J*od;G_-* zc)by>yxDK@%dnM$Pl9hRTOF}M*K}Ij64U+cK9#Sw?W}DmX^U$Lec!sAclgGIWnQc20|$Up(>~viqdWVk@u1 zHk)hhGtwjS9%11#X;eM%f> z3-yAfeM-!hLjB0ncqfLl9-;nlX`d1Y-9r6;OZ$}GYkM-GUa_=K=}U=v-O@fK#*6UY zD9a<;z%f#UD*7@;n4yI#`d)3L;|9A136!|MBUEXP5+~?F70oCyzJw}P_>m=4@dIOu zyFWq|Kll+N)Ps9{#>+w0S3>=gyfVW|j3S|4w6xE-;VM+Im=cj64kbIk|OnuJSWnuv)k@2{lyFbEJwo*GaP7MXb*&NNDA1A2^AkFuh*(G39ktYY2 z_=c6{n~`C!(~^*hnZHPr^Jfim)dk8TyV-J3yy>$3P=iE=*i46B7S~I~Og}DpXRIB2 zw7k1{-m6AFM42C&GSIy*#s{>)dm$FR?775kZK_&5u^yFWD&0bDgz6Aj$RmAv7*K}gi#+H3yZ z<`8bvRc;ogkfWMjsYp_3zlcGPlTBLU)h>;+M4vxeqE8$xk&MA2rzLV*jUn6;@hl7N zmgrX(EzvKpTcTfAx5V6J#oe5tv!eHf(!48_<~^Y_?+B%NKPb(+L22F#O7l)on)iXy zybF}(Juvu63_kVYpf&%udLY=$=^&dMInkplIoTU_$cNLo%K2Ig5y>f|+=2t{iB{S+ z_P9Xip9jZN()ifhJK~c>>ww8M#bf&#SO~-1d^*Rw-#4lGXLyopO_roz*>!m-fl58D zVVI-MZkwjvTRA7LoW`O6SIzD7tI4LGM=N*$Qb#6RPF842Lm8gWQyRAe$*4+0Gp@AL zG_=Hx)Ul?1PnDLq11Wq!8XtZ$l4iN4<^!cvVm113V^?ougYk+qxMRk$m3u=0|jqFr)H5 z@hQbqYBj0B+9ucZYPXunKPzOp(>3IBswKMbnKLfaiIXakD<@x+IH?lq9M7%1J(`TX z4Kl}Z=yh03_p5zP?N6*8n7w|(br)!0KX9x<08NjG3( zWt6Iyuw;~%5VZ?0wTdB+)6ozGlxQVH46#k*jEbY0)wK1|n88*?Q86}(d0(ye`s9{* zt@6*j7ByL;Z1eTC@6hEN$qH2XFAJ8+mkxD`e~Nv~Gi!2q$cmarsVe7*VeMC|9iQEP zqX}-O#ZqLq$BmgOOD$tNY2PN#0?oG_?Srz7_^5vJMDd+r?Ts@FAFeDFDPk!2kh;%{ z-82cLOBOcI+jr63_Vpr-tP13Rn(+9B1xN6*C}%tMo;cy2oYzvUHT_XO=TB7Ui67`) zWJoZ}?Eo(!Pg>AA%8n-M&dE1?s z#uG*8E=v+lGPw^SByQ^*8gK6uPkbzD7Di#-4kU6KI?TSBj9{UcP`7(wdp5VnOd4-^ zLH>u#?p|}ozCIoj7rz=)dn0X)t9%!3$t7uZ=sV^YNBu^%yjQ^`GKaoJ9_uE~)a2SU z&$g>9cYvQWlK!OO%08tl5+m>z1B^)a*RrLlT1!*0rAuQ=Q^35X@<+C1)zh9>PFY37 z%R&tJnM~E2q^0P+yrtdno&==Wghekj^)3E|GBk=tLjFc`(jKCxJ%_UNL zs8K~C@ZAH9ls=OffrssvOQdwFQAHx~lLL&D-gKK#T^NBE87a7j(qXrajKCKdDKJuc zbz%fwHo!>f=ZO(`)Su+WP&&b=q9gD{1B{g3lo)|O9$=(&ePRSI-9K-d(kVujrh#uB zV5GDqF#@*_FjBfMF#>OWK;AT^I~!G+1|BoONa<0D5%{RX>0l4vdt@;KB$beFsKLWN={wlD-2YB{H}$0!iP2krEkP z7=fhkz(|P!#Ncs+pl*r)12qb+6MoMIGVFZ%C10y9exG(}q-+_@58C)2Fr0>8;i3~1`K+<<$ zq(lZ6Mj+`sFj68@3Zu_^3vYevg$u)eP(IQlkX`+e<}TeUWp3~pdoy9J2fiYbrVqAd z>QQmIIt@H7lGX#yGm@rv@DCE(i8djuFDHhJ6X_gV@NSL^-}S&ZN770%D#=Kj1W&|O z=6WEhNZG)%agDkDY=a~sWdmOx*`|R%i=_2rBnGqA1V1FMsn!D-CdvjTer2A#)>bL| z#5sTcSq6z9;VNTfy^jD+%m<>QJwouDsZ5mI*1BJH1k=O%)B%_tRz5Jjt$e<_mB#c) ze=Cg+e~tC7(z4Qx^w>%3Ms+V8sI7v@QEJ)swiI0w*Ocpk^p;iy-!(22*8yK( zBxNH7ZBA^!9T^)5D8<1#An~Bmz%PyAvJUuFBPko9L)<70obpU@9;%VC(PDv=pg+j? zKpS2-zxE@IOXAJ#^i6r5r$XMv@V$LXc;NcAIb=(Ls~`(^oTNo>5`U_ z0)3*4U^=B`q%f+7+8+WR_+E|c9x2j8JF*@EU!QsiNT|n{Kpd`YU_35t zKpd`YU_35tKpd`YU_35tz){Y>l{$D4FQIR}o&AI3Z)Z-{hQP~`4v@7{Tesrw>t=8_z8m7l>t;Io@w%Cge!Om`iyzw? z_VSy-wLkngk@*q)_~b`m=Et4Uk2p%r24_y&Ia6`k&aO_|InrsD#hWb?KwKx?wX>@q zcXsmQe(J!z+9iA8O8ofOnIFL~PJRSte%u(BCHQWLA2-fc{J3$pWAJU9CHQcZHUs7u zQ^FpY`Elbc1;(=01rvhe@Qt$+Mvd#+sQ31+zsn9kzAW=2_|c2wWChIpxT&ijH`V;O zsjDA1ML*&w^#%A<@ebSs5Z8%&Hg)ymrcQpmt@?4FcG0Y8;154O#(btqg7;ez{Rqtb zcy3oeo?G+dxn2EuZuBDu-l`%Pr%5~l3Aa4-{wki3O#lf%are2My!a>Tw_CIe+o}f- zGH+?S;G>cUftd$4clF@rng=&`_2A~{K@Rv;MKEXi;z3~Mn$4YDv%fmzmhB2Nt@+2t z?TdN?-pUGu-u*Jiffw5evS=Y(<;0_04vZI{AWJmy>02Xj&=b%7ids(N5f1zUL(I2IJ0fum-E12k-I)vlry z<)M`VPCs#fgxHeoh6MP~6k@&+_Ww@-J6);gqxUBHZb?WT31mZ(B$w4NSKK#K*Fr8N?}yY-A-d^Us)4}2;%^d zYlyVLl8Zhq5`jl#5eUA2ia;O{D2WQltr7JDn5&+!gOADL6g-vU6v)jtIW_?1ar$Yi zaY?EPygrhqfJCb}^}JaMy9nL$YLnS{aWXq73tjLLDLVpBilj*(QQay-fm>AwzOsRdbYTNNE8Xe=G7efB7zt!%6$g%qxtRbm zNR$oC7?D;P8^nIw1cgxpLEf@5@B1@<8is_P)$)HF61#|#57*-4!!b_Yn#Bp29M)@& zj`{4Zw$fIwfLT2%ANX;$L{vU7Yb50ZkMh(Vg0;Ht;r~w7=FiLey<7ens}JmLZ8AS# zd(ICHyK6qk`MdZc=kMZ^gM&}xNrLvhzIyHC6L}!PyFy4^JRnc={=;FN`d>I-eORXm z5YE>f)+q+=6s zqIAS-S-emU4lh$_UZm1OpQe9<-g{DFulb1ihkIt?pRHB@z(_u6ZRUo{E*;@(t9ici zFq7w7wwKcyEM+%RzrN{VaCn3Zm)Te8ONcj824}0 zo@*j2$JcG&p&=*HEs-gpI9gIZ-_USp-t_J0(?~L!t~+vXJ~%P)O|vasMo_Y=AHw zXTGY^{GXoH&(DawCau>^@NJGYKecen+%}vk6YiPD3rW4^^x}qM_y$HTz1A{YEn}7K zHqEInUCTx#zMR#|%|9z-*?oHCaY`avfa?$IQ({sO>J4eL!3jg4QX)?W3BEmD_W8Et zaK={_lCPeqC$6-D*%153%p3I&`Tr@K=)&eBmY3J)}d? z>mUK=D+_6$St)4CX#MGE_Zk$wFxtJQR`VlPgPPdqt3&T1BUtDq47c0sAh#=gWg*pC zZW{DX2SD!JbI~^M>V#tuo~3Fa9Qzs)l5y~5)*_#3`Zscpm&iGO!pFoJEUp67Q1bh%t~h11Cpn%o57mJ@f&Yb zz*`zgn!c{;sl%K=Jc3LFK(Beq%LqR45=ME-OK8 zr#4kRb+!pYARa*`0-)DC zQ*Sjv2*e}EL;&=fr@V~d6E9(ur@RF5)b5$pG#K=q20XB~NXyX7nGLAOzwO zWFi21%~M`R@QIf&%2Qr~cxv~|Y8njMKdqB?%wWxPqNi2@pO-wfqw1-~1R)TQAQJ)5 zYo78lf=|4JQJ(S=#8bOzR)azJO`bY$7HeJ_J#`ZBoaCwVs-y2tCJ2Fe1epkcUh|Zf z5q#n$jPjJ1AfB4PS-Rin%hbHpMo+!ZF;jVkPvsC@m-A0FHmYJd)j2nSUh{~T5p4Go zhI_=<@2LLRc;)t<*Dst+Hq8-syN`Q)a{mlC`gEwvox5-kwD~_bVH;uVwZ~NUZle6) zvG6#|%k3&}Q3Bpse}zx}!plu4-QB3d2;4BhNa>u!2z>tlBc*R7M&QcvylG00F{(5T zeDeS!rFSMq;NJF3b1(+$yIe~TP2r&{qtjLZag(+))u(iPG;swGHw8vYuSkqQoG1G& zAf5|#DIE~4UID~&fsxX$5+m?8nIEV6lop!PB$WVjKbEf>YyD}1qvqSvmy`GsSE;I# z(Q(V8KPG{=Dlk&QHDk>r5WfUQO5aHmfwzeMmH@ajmK z2IAw;0wvrm;()owC;Q&3G8=^FrQK80PqEM>F7?q7T#P4`2EMED^@LaXa zWpvST;lTH}E}x>Gxjw$I8sj?Ns_ zMX`VE{V_kb`aid;L>usTMjCH6jP)rji6OrBDF&Y&NfRG3xHXZ0J0fW<@ZXIj4a^pa zyKObowuK?QK4glK1m&TEeHoS{H>JJVPkJ7t2FRY=6PKZf*&1wV;aAIBC;*(gXsXR3cfm3 zr6=&0wn}i~JFN=FYUKkHkhL`0Tx@N9JGNP@Om(2Y*goEr*wFI763M581=*SwpMKta zs~Uo@G@2};X2zqZ-)DlA6Bqt2qk-{Js7(p0wYJx5VYa62qF25iB@X7QT`r@Gj*AA? zw4<~nO2z)C9onaKh51yH;e1sVfloNJ-$hw@luMQwC`os!>uLMlS;x_tqq-=4yRPlL zb`$?VODSAsRR?@n%r$ z+SM8x5?(R;qi%rL$LCa$$a z+8bkH`VWiX`idSdrmjkZO(9Bbo!5%~I*XALFAhs%Sp)83YS^#g)vhk z!^cdsnvr>3GK;S0aayWdU(wTUs=K^Wx4xn;>n^L*Ei+L~XUP=*!iwJOo`2>Y+-qK9 zj%9%9j9gpMd%nudFunvPuC+wk8)IVniVdy$iXJYeu1bSVAxdohJbv)DjxI0L^9A{P zv0Wt^f%}bxkAiC`-NC5B2;4BhNa>u!2z>tlBc;m|Bk(VKdDE0mHL5fX{Mi5_rG3Uj zbzuZP*hs+`N)Jzrz)ub^Qo1BDj`pYjwDj*3{@os3z5n#fsxWH z5+e}T>r*B6DSi)iDV-agy8`&R%(?P&wN`pYbj1qbb26Vz^(lQUF#>UCXqr-TZuRTn z_9hDNSywI{J&B|7qqaI3y?U?ctVtk#42+cUn?7<8rmr9{|EssP?P`hF5f%nKKARpJ7k8cEYY`ZF|2i7pj!K>9NAFmR7fTO}_3dWa!LhvK#6||gLh~t|NM9)pe2O_#TTOge9r zzXqB`q$Si-0T`TLjY}eJ^QNg)ivj9|sz`rn> zEcKr}9>ejh7*g_lkl}Y_G%&6TwJE*NMw_++CRhSzmvG7UXzeiSVnx2kVrb3PmRv>` zi*o)hb`9+7+PgNREF)Qn-yVNRpVH6bBs(=Jrn}&4RLl5aR!ow~wWjcaO zrK0C^voIpG2oB}z;zF4_2OiV>iOJ+DV*+?=oNm?v$%pM8?FIJv3nSme!4|$t(ms}!q^)Q*b`7LLgl}sYc z#IiyknBAl>F8}r7e&p>j6Q}O&#jM$_D+eW#&vm~`z$A%BRfbjBSHmRUry}t_6^W&H zhe=#kk=SkM*Cpn0;H}R;^Ft*6%=ehQm%@7Kl9+8*bzwTmGxeHh*-$6p=~}Y3FZX=1 z%<#g-m%zkTv!>_jjj=5Gq>cCbz8o&rew7BBLX>!I*ZcA;L2o=m$4%4x*sd}>fUC|7 z9|ea{dXZ6u5qRwYBc%h+3e|-X_-{rE5-I&hVgzpbo4jdCuP~}e1peZAIivSEnN?%BfK80Vlw*TSid1zC_x_9@{!kqFHFIO2AcI<8&zzSjl~{?XA+gkX-+z$aKR=uV9Q!9b;f zu~6%R53~4CK5TuH8K!(-%u_xv_9>q#pZ~?3Uq+m(U3W3NWczf%ECq~}*W`FxTfR}o zo)8Da8f-l;vlWbe(gbjnsj}%$PqDQFVXlT^lNhjNwqn(m*-=)}g>CIFcD0OMENhy> z&0|ML&lPtEw1b~(J@x;ycP8+56-E9(_dc?~DB!qZ5D1G4BWeIqa6uebT;C%v5dtC3 zIP-TKqhp?eiU!9G7chuQT=2#{Dh^Rmq7yYL<3#^BpopS^qv9xTGYoF{cl%d$*SAmK z>b^JUy#$9Dd3?yJs`Kluy1Kf$PoHyNnB3CjGcCo;=#=wYwM7*QkLnJyp{}+C%@~k% z%n1`|M7%Xw|B~b$pJs(>YAW*LOa_g%VvcYtGMj*YQX1@9Hr#hIBs8WH^UTaYkPGtt zA*JR2E^U?xIK4E39(G2{^L)FsKgV~`LXP*kSU7ZmG5j>5NXBUck0`qR_k#v-lWAI* z-kGYALcVp-po>xjx#^&;M)A>u3TL@%*yX3;Z|-Q&7+TH!rmbcsX1ktcs^Th3LCEhU zEuJ)CLuIda>_Rech;KZ{?sAp9Am5e}o&>qoL=(+vy#dV6THO9Nl+L!R6ae{p6G_sw z0~jWzijx+RH#He(@`rW2GC7wud*WIDkhH#LPx|~dRy|#6`yAy-lT`~(T3J>%%~h7g zk5Wqu2ij|BJI~4EzY&} zhEy*FBrU3@nKG}kezm-6n(=v!*NjK&irw4OyrLE3HPbX@M3iFKyC!QZ7LyX+o2Ad# zRn|SeG81XxwjdiSqfyMz`Wq=-P-XMm65G5=#h0jYitjh)S`(QmHKwmE!ac6yK_(Ug z;#&2)zV*UC^PKn)_Y-y%eMA1vM6q6Q6R%58eIc(jQ3S%>^7RP_`79GfAlxfjAmn?8 zfN&SJK*-m;Ar?~C9qla}IZY#fmD;@&l9p|bN6yz&S(Sm|RBe5R7@x5M8zmO|` zZ*(T6rimWDW%qRDhEC44CMyp5vLrjDp~cjrX6pTZe-@?7nq%|YF2x66m+~hjCT3B7 zzd8GuF2yUZOX<5TNQ*vQ#mN8kL96d2$?E<-=~jL+%xLs3!Q*2mQZM{JvkTQY^dC$X zk#I+vxhN9)A!)2?o^UV7kkIsO%rjb1`|rF3={dHoQRdn@@y}`9LW^lvt&KUpOG|Tn zm-goPw!M*>zaaa0c3qpu|FdoPsn)xq*GC;RfP0Nev0R*M7zG!Z1P24{rAhQE<}hm0z**OcS2)`}8U(}+inZ>vX-YAZOd zd0Ua;F~_yFzu+4-%i{fY#;!z~1x{yW|5xS~CdKW;bn^13iG@^+Yi%q~Gz`+EHYjRF z-lCYqYKpC)%8oBleeQ^$_fE;{cYo|XispTGN}L|_r6^YguAOr1qgZg5D@NxEfDh4LqKm=@MYbn zsr!#obCyD0XCiIR^Z<^MItTt`p;Ht}o-t&G`+2I$a!7O;fpDKqnw^3~mlBslE=k&& zf<%#mf_!+3g4~is%OPoetOsi4n#K6m1RAQt82U?gPrV6Ee!R6ranS3M?39KUQ;(Wk z$YT5sr3Ww7rT75sQocm^JR{Hu+v?D^c1bd!LsQG-6JbWvY6+4aI+1knEb9VoFZ3xU zi%7Ul84?<8MI^n%RaOP;@5^4Ez@m=bk{SXAUg3oaSp(JEr1vV$I}H1Xt`Cw-JKaFIju8 zPVJh6{IQ7w4(1kV*sp}VRT51eY9xL`BHKrq=*cY#bx`?Aup2|&cUTSZUpkX}$E7lg z!#CAt{9Z$`41oIHbcw13zaAxq_|s8epPE-Gxy*B(1gzxBRdP)MD>7;?_eKV+{RLli zHlr@N7Q}g6J&5zDY7jTE5E$2*QT7|m@7C72wa#i$c);3rc@0&DJtb;fXU$Lb8&~qe z0yVBXdOcjl*{RKCJ$nr(=C-Pun<6tQx^sMnFNoK5zm1XBHFlNQ3i9uNmj_{Rr>}#h9Mx_ds-mmzIIqH z4i`AyW04$(^|w8))bBLQb!aX#pa0>F>NwgdiYmRB*zL|hikl#q?!v z=(X=9nY_qq^v{#*l!i`wn`v3|gQin7KWGMp;!r#qQW-S*(X`MgNO4{*D)UZ6LLYtm zDnE*qAhXrYxz^?|lfa-b>AZ3J!rVhz7!)UIAu(-j3p9EY802hK7>b>%4x8o|*7D!m zRU*-(MI-#1Mkx2tWGJ!#Gx|8YN|b)ziDZsfW=K@IYi3f=s4Aw0yQR5ERU9}% zT^cCJhaK2yg!85m4Z^t85UA%B71P2v6xT(C{!OD}%`~~nn1DPtO*bnc@rSbfTRXVQ z?tdrYCSPEa#VgXJF$u{O6IPB}>^?qHO7+8faDFvW>sA;;8d6`Rpw_ul~EBU zIF*%}s~w4Yg_TN475~voE}qd_Us2N97FByJP@>8;Vy(n-0x3~4_Wm&H;l{j5E6S2f zl;oM#rrxvaD+lFlvy4fEnYa>9$2Vk%-R7l1(01=%n>lsu%HbUG=epaE!L&IZUKv(p zUyaJ~uu6`HRdOt~J1WN|l^nYb{d$hM9r)Jg_xupa@A> zm!!=pNUTYWAM!~p3KA{H?BLLU=N@H3$v?@SIR2qSBuSg1B4v9)55bm2T z5c1nuPfQKqP`?xnnfJt0;ZS4<=wp+(fTI(_gOr0!u^6$sBb1HqR0h4?RI5u#wAeEP zR2=jzl1!GhMx#%~K~HBmuUW;R#B)p$DuYIES{LZAW;kfnrZ{Nyrum@|u1Qlo8smms zXREJgn!aS+xN$8EN|gTVqQj7OoD!d7N|gNOs>4tQO2qn9InXFh%77fF!=_ngmHO*c zxnilSdcD{b^u;u0Cuz=0MyKSrSR{kcNp#D*&78I7(Eoz(Xm-21de=vBN}HKIyADsG=uJMc{A0?0`UH3y|`2n(a{&QBM9>ANwo65X4sQ% zrs*1tfqHMNjmmtEP4h{+OPwmq>8AONWqVoDT;a%iX~Ru8_!>?u1jJPxsz-VL7@Kill2#_mAb*o4W33b1($mvI67qBt#md9Iu?0e2IRu2e zrUgR&#fxUM;-n2{q&7@LQfsZ+bZWz7DsdW;T1Oz<+gczbwT?izAGAQoybWU(cBwA-4&(@O$|-sV`?~>Q5zcJ(VT^mUFwyG zbaSm;o=2BD#$yp2f9q09Y5(#AX05%yGL1^=l?M#qPE8g!-KDbgWRj$c->h`oxXuW} zLPEB;Tag!}q9=cBWItKwB;+1Rv=nl06HPR0))wASP4UH+9YaHYQgBZ{CRCONY9i)a z))Y|*eR|EA*6@$mwK44{^gK)`)jk{z&hdl)EUJrs46+oZXeRZwiofI7 ztqyIm)$#Z$gV8{l&>`P!x8(J;M`XGUWUuL2Z4a<(Ws>hTtL^4nM}zv!^UT2BXV+SL zS`G3AK=f&6Kv zujv8YF-Z+eAy;MknjXO2+LR+XLgxCaL`fs{6*Y)ep(=?;AW@38Tz)y(ns-oY<`g7$ zBmoX2b|l$BqPmzJ9I6r^B&w3^AkkAy3x~A{5E5&X>>yEHObhqKr19mD*rZj^0H|3C zfy^~t#$`R86>$|s|Juebs?~81{cJN%edvjj(V60)(U{_(FR;!~95iZ_X$2BBDh&E1 zW{8>{3dQymhoWe-%F03aQp@GF$y^iy)Rh|5 zYM0}?)X}~gV-Er6T1(N%^Y$OBJ?u)5FWP?q_xLmfr@K^kq4YFW{9dJl$8|>Ri|pUv z6(3}#fzy%^^Ia4D!mc8MJT}?jO8Nq?BPd#cGYL<|-eWENL~7|Ih$E4_)T94#uTMu!sL7BGpIIS(WO?zl1?V-gC zP%n2$C2cu-)Y6Iv+m~g5uX}#a_k{43Ge8y8oJ6Oui#y^Uw5ym97_r%#|jL z&4Rl&hr%qpD6atAUM39{fVtBU6z;w`6z1_mP`D@OP?%>9LE%o#p)hNQpl}b^oM`~& zFHIOV0C&reWl)$yO&FnYYjP;ei-w?ZXXa3t9}Gd^&izzY0hqU#FjfHWexJ^uFvplM zLgAkKnG6c^LK8;loSei^B0R=XXUD>1Cl7MT>k%!5e6xwP^yvZI&(2Li$o~2$ia@vz zy*U9PcRN1^!rj)SvU-F(atH|b@D>Pp{Ri?K;rjoWiiZ4J=BB0xaCjyu8gj)a@*Lq- zd@|(-`5Y6)R>NJ?0wK2y0pVU_79&MNVm2{HxbL(;$lGnr>j-zS8J6S-nHx}L6+UDf zDUN_`(^6p<&gc%1xyX#=v&DVl8%iz!qK+^grs955bhqSo0mi8 z-CSAv*L&8MsQJx{Et2@2`G*Cv);wq7Ioo;&Uh>-5Ve{qd;wp#72$0jk_yXkcKQ)h$ z3b@_`*Z>JIfWs_yK~D67!$6L!z!M<%ZU8x^#OO~ILU5eTS0rE_#A1-cV>T%x1XvCU z;IWF700D+U0(h(=B|w0IkN_SlNeK`z&5$5B1*Pqe$!-1VGj9jPD$+w8{t zW@RuN_||Nq93JyY86m)a$moY}j3u^a6EiB!Cdx~*iE=-kkUwUG`J@UVzg8I?qKo8{O07~Vc@Y4d8DG;0bs4b8J@bR_-#O6;BR`z_>&8)IT6ebvuFqof~!`{xKcE4oZ z3|lj&-1TA$qy%$)ts&$EsFaqTLfhOb=^!S zqpyNaFl%3B*Ix4^$js`u&S1Ka*qHiYYt3}G&Qwft>kQ_%Uu%9_XE48~ni)#jkeNkp zovB#l)|rZ-ZLJyF)|rZ-ZJntY+SZwhp>0iu#-5$@>eiWxp>3@h+SZwhp-Icl(AY2w zc~;D4>rAD)w^q8l*X;V1*fF=at7N%;=C6(Un~%xcQ66U~U!3kDImw_T;?n`YJ;^P(iIrmos_5^k}gKV#Qk z^JK{1r&^tT$;|t#kSxx-q-NZg%&f4DsPpV9b-iTfS+*60-wi@69wQIJ7n-HNGFkkS zA#tVwheyREg7A@BqMq<5L5N$yr39g$m4nbv$wA1pi0Or~+j zt5R#uzTq^OXSMVAhGZ{yH`CAznX)k(l|g4Fv|$DYQ&J%GOU=AQKO1IXFfRo{|Gags z8V|P4KL{o74Kqyb|JgnR*f7JGV`OQA7+nl3l|eIchwg!4 zuqhDwho6dC3BcOaUKxxViU~k-^j5z|6zCI2{XfRYa9ytrBLXj|B@vwFaVRu~E~hB2 z>L*iwxb3)VYG`(2BNFb_84?;Riby!tHJT?Kx$F~Bn<|6GGse_#pU#lbUo=@n!p;9= znt!}hzl|#G*1E|67ClnGSOx;5y{r_{YccoG;a-;^q2D%yg!@K@guZqN3AevZPTF>822Ly;jtE(i ze#Gn<1$r7v|BoXEuIqKqBPKr=#T3C<(b_^YQgS>pMvUU2880~=*=)y9o=2CFl;gXM zrySp9RONU^8skZI0L^I1@yODs5`3b~?sI&XahBt|jJ6!#Wz6OHE+a3;cNu>p6)Ub#lal9c+h1C3UcdyX~TB5gHKW) zvUt#C*a>ps;z5@IC&>QdL6@N>$lval_K+D^wLvDxU+y>PGQ0$N-G1rWD3g}v3C$o9 zO*9bBeN#iwA&N=t1Xrx4y_3AYxs-_W-8m|$L9;Fd*Tyu>eV=*{RBmD-C*3PZ> zEi_U?l^Us`N{y7LaT=Llsb5+0{Dlh>j`rjlK}H+LX{6VbF~m`YMrx?CUNuyykrFjd zBl9ZtD@)cFQX`^^y*jg+XeUj3#-)imN!<2B;ZH5*Zl zfa98L1Q~4{r;%P$u4T$sZfdAfBQ;d1krFjdBl9ZtD@#_-N;|mb8bQVyZM;UxHCy>n z{9aR{%6ipMHI4YZ#%si*Yc`@90mn7h2r|~9<26#QP0Q~W_L>q^(@2S`X~d((Ys8~R zX#^bCTqDR>bC1)Ao`2<-J13xZ7000-PBGV4c5T{MpB>lI^2lf1X+Cif`t@kjoM~w& zSC-Qrq%Rtdg@vQ%!GFS#-+Ra4DzvXdivS`E%z zUS$XWYgN-``Lw;}WS>+-+KA!516~(3O_`Od4JUY#E%jOY%R6-JX>3i~9m{@eB&RC` zbx%7g@o2k>h~pLKwjv(rzAbGqF5|)CeeIZ#Bpj~NsB_o8s^KIBmE~z&5c0T=<6}Ws z9>|eL>O3=Uk0*$b;|XkYgyihaurU*a?9LG62O*m=%-BK5795jS5VGIJBbp$bn=*8B z%p*2*1uF9zs2{ZU=AbG6w`xG$34f=$ z5j)X5d#}`R#%vJ!Q5%GQ+y|#pQ1y$1_I@56%7d$AzIbn#?6_*prnQ~De~NB@ce_g1 z1bG`1Nl>w|8dUtm93eoNobGICmbBTSO|JchF+FC+Q1E8Uep{MYCLu{VBB+=bf(nZH zlBHJ_KvVTRaG)8qA-_lEx!U);Qd7Q~l>zK(x2g9`c*^r)c1 z<0?hd&UoEy;R3@!VgoF6eX{vwR~gCs2ZGw;tBg;$B=?r?#z&aVRBHaLlbYYo zh!fDF=C`A9!p%DDro%iU_`GvHVWP(Ha6Uok-A@pD2NZ!p=$p&iOWd(FgbDVce4zvLEntkl%eeJ3i?c1mPE6nA- zA-Ud3$hVkCB7*a)5y7(z08nO@e>BnNHalNxzvPAekt}Mg$b|cuTJ; zfTrsCtWPs&Lw?UUf{1`JPRh!F{=2r`kQ6JL@}*U#<$mfNz~dtV`V#c0h`{42MGv=k zqs{dU2br?5&@+5#xX-3|s8ac%0V&8&WC7_Pb_bz<+8u;E?q)6vLMF5J zLjzLKa3_yC6A@8fqdJ(pLRD6a2)sHK=e4P_T14P=sW=V@ph}f_O{&Z*Qe|F`D)VYo znb)Gqyb@LBbvW)>!p%DDro%iU_@;9`VWP(Ha6Uok-A@pD2NZJhsj zRRJ_r&u4v_K^yXWz7gyZP{wnzGN519)*F&yMN_`C%Cy{1y#siBL_lAH9u*OIT&3vY z_HMJep5Y)9I~KYz+59pl1HL~as5jWxWUj?#$;8@)Ig^fK({Kavh-6%jOz zuX30dsq_xU1UQe7CzaosfdZ}nqir4BA$^f(mVrX4XdPu<&nm+@=y#Qk3l&hZ;=GPk zwj<$#*KerHCu8u+$xD^(jPL=~YJS6`N`6Ms3x;@a!kWX)nr(xMahlD8imyBG73O*r ziT?^hY!nX`gx-e*q4#1zh?(NYf^euyg^^R%<_syN9#njwaGk|0-!$Jb&^5`wRzNq{ zO-5ezJmo)|@4Y7Z;3B79bA{c+*VSxV+q?fK;#j(eU8O|Gdznarifz@PVxa*5%H;Gg z6HT_+d96+~jOj5mh9>%oO(@?>6U!tdDMthqahri+eroAe1<+JI4;*L)ZOHHWMzGC5 z8P{iJB)Zi>-$;rTP5II)GkZVv4&d=Y1$_y6R8Zk@m7;xn>-@%dMB^Fy2%MiO#C$fS z?*lSb1R?Xn&_~;@whyz-@mp;Fqrbc6C$XR<7QsLKR8)2l`c-fc);lRkv+0XYYa=Te z-jz<FVY^o_^Q%xCCdZ~;}HDzq7DPvPj8TH2poh;-0nljF>DdYT_GS06ly!~+EoZvVI^|F16Xj!6J?0j@F!Zwrm0nm^>xFe`Xbk;yL8TYg z)rQ81pDw6;J^oMTX9~vj)X-KB-S#nC=qzl`zV6iU8!JeNqWQ57->1lVtVYCyoHY>P zG;%tZh#I*Ms*&?eVB%`zer7=K14`sRz(($4Y~*7!nFUifygja6(3W_z&9#|fbItrW zC-X;1A-UI35PJ0lq1R0;y__;P*QU(PwJCFRZOYtS-6Tm0s;C1a60_QH$_TTHzdu!) zRg{-z73HN_MY&fRKi%c^hTN+Td1+QL|I)0YyfmvQFU=~-lh$fPuF1DW!^$*y*|SGz zGX82`smUlWH5uilCZoL6WR#bhjPg>GQC?~?%1cc~d8x@LFEttEUV*)+FfZ=F|J9^hKBE@iol%>^&Y0oHm2rrnbmlOAIXMWcKbXw#@9=BL0m;vz z@Vm!B$j_o&+5Y~{87UCtw~PalpF`nSi-VA#+Tr(!gOFc9;g^Vmu=)eUn8}mdK=6zi zej|n75e~_#KOfA`_GG`*BdW7+`|~TnAvr(W!|(kDAwToWEE0s?LW2Xt4vbBlZg_RsAn8~D|n@br&gV!#pv z$B!{#2O{F9n6Ls7@k>hdtcds>CHhrF{E8C0T_Q^LHbO^Uf6l`%W)d2Kq zChIj*FEbM5D9n34m3gnHGCbZl?YA^k2F+Hj6oCU|5uh*>{(kEKl|9rx6gzEKNeanN zYKckQum*+!u4(;luFB{?I!|SEAibwDdXS&YQW^B2ABo){b%A`4iKH&4&%i9UU)<2N z(EKEaJSp)%$e}Q-1QSsiW`d2VjDgOGRT)3VvA_nb%Agt1QY_<{(Wmpjm!q~ z`Xa)S>=?DbwGC!b3S_p;x;}+Gj9tM&GK{q*-s;2W81(l9CUoB3QTrdxozbw#;&Uw@ zdaKE#g^+*!PP%r4Kb2o z9qPw~%=lIfGKQa%#`+16UoerRT|dLPX8xAnVu!rIemF<7gJwn#<-*|4r5)ZSh{$_{ zkkq?`AjBu|YkDHQwzkJ}!y4xM-OMY9@*!~wAxG~Pg3$YgAoPwQ2=NS;wIRR_YuF3A zbGsLG!k$Yhcd^2XLvb3Jqv;E1h%VzM8hooPZTMEhMffhS1 zc3G0eF3?9MUpVP~re=pL#QmuZns7$GWADA5!f<7{k}th^h3>;svDf@T53;sf|fSn6@06(H0U{#@p#>yzSopa^C4PFkJ^1qeqK| z&Z3Ib(=wmo6Mz;vFqA?a{a^}0M$>GEj+VmMVRVEHVK96JLT9#odhJoq>9t2ar>93f z*`$5?3=D>-(eYl%(XWEs8MY`TbaU#fyd6r)oneKzZEZd@#wbNVzRFy0wvL6yd<9lI;#D|e9IT*luh^=HAm3qus8$0SKPxauELvgEShv8uZHvfTwuro4 zi^yBGh`ep?DuRh<(?WH#YOHvE7BxW=UiF$4bG2gC0%m-hw4Pf5Nhl*jR023N^Bu8m zR&i2g$jtR_sJhwxz*1e);-Iy|FtJ?E+t1=9ipg~#-i7hJ(%UzRMZp}=+9qkqb z@e`BX>d|C$+IR<)0cVq^}-)Xtfn1qxIiN90WY^@_V1^gPZqUHz9CcA`^kSw~TCS45X&$`5VBVs^I z=hVz}pqHmL+H%O*PNUjT98hj2(CjG5b_!%y|C5_ew~2H)uI9$GoaHsk!HU?yk;X!H zbu~3(V!uXp42{o`A|ROs6$ahTh|B$qsIYQMTwYFz%gZUT_>5S*9^PZyW+gTtIS)x%DnyUo+3bhXNZsckKtd;az}jYj@T9vn!L;LyMEee z$_J)5uZY|k7RKDGnuNxM#!}#R#8cw#w3KoEkKa=qG&|R^Hsh=U>(JEDY+%RKaO~SC za>y!#*`u5N#OXZzdsDF=d2{Ggel(K_d7KsH_#4}n^0IC!7M0g&u6C8@(Z#y<>}Fm1 zOVIHbqMMtFb%~cRPw40X^3Ev$Z)|%Ch1^sONu0}>i^on_xT6uS=}n6VU5uv}|72rX z{=DDn#PgK=()PhQ`Wm>5&ha`xUM}enWfVM6LYR5tHEJ>dFLLQZlt}KOQ z)hlIgn8PtM7BQj9{@HgB605O}l}bYnJ*>uD|7eHIi0ncwVF>YpI$(y5qp=45?>&x2 z=ol(bfJihb&q5%H2}65eIFu$hNW#Q`^LE@1#y)qGzuCUC7iVs^Z$0}j6B(O7)#H|b zRQqln`BmnWIkcdY#nbJfIS+*w_tg zXvrbzWWjOh>U(wqD&WYMYgm*jBa?gz7v;xNhj_pZ&0_T`5o!8;Bz8z>Z+;Jp;vrmq z&p(XI@3EWsLwlT&-$TY$;{4|NM_(=#hi8?Xr|~P5{2tRXYRm8WqY?Q%p7XMz&F>*2 zc%+W-ceCecc^YKw8j=Q{wQ-)t@6F`*c!0qkO@5E9Y9__}9x~R`)Wff-^E7@Po!|4T z9`YkxWu2U-Nrq>{E`9qGvz=)A6BEf~#bCvLC*t2wGBJtpC-++ilp(O`b8I+Cfc>P! z1Gtab!3dE)b@2f1d-fb!q|aD9fZM|YSdq>w9>8(nQ>4#bJb)vz73s?srxVx2s3N_1 z@c@papd$U;;sG3EP^AB|I6cQ<^odkj!MHoqJiADx6>yA3kxDE4I25V0f)PmgD^h8N zAA2I*r$1oiafm~t=Pe$<@i<+iZ(Tfq<3XfI2a5-AoUsz=hQ$LoMzl!Zwm9uwab8rU zq6avFagmD7;Mk!Msc7Agc#(?E{8$&M=**AuDD~r8q@o8#H=%aK!f_T{q|(Pk-mkI; z?;@4H@ID~siwAg;c@2@STUScNhiB;KX~s>)eh}vA{7}sA`2k5i7?KREJPk62 z7ir-ClqcMYIN$E#r`!5ui@}bXYOzYDQ5obn=}DE5!h{*?3&;2o>7V5E>Bnf)jvt*- z>c^!>Z=NW{y^9`hl!;QO9!484A;=8n4Z1RE>6~+p1-?+4 zTs6b=$H=eEOMYDCKKiCIFA>BsXXJH6#=LR!Jd(P-3G;}XMe1|NsJR2nVX-A6=O(iB z@^%|*<}FsF|I3$CjE$QYIB{2k&k0MG=6!V z-}8&?{2ohfmd5!#WH+S^H}Ts;Uc2VA>mD16VH+&^KRC9*M0z7`ih0ZYQ}w~#!bJ}f zePi##+ezNCqt3idM=92P)89B!zlufjF07p7$3WJmPhYRdoL(Y-Vz0yUF043F-T~mn z!Ma~x(ZR&C8yXkp&5HK;ffCSQ7iSLFhMX zBhoekh_-@|FpH2W2s!>hToZ);DL@eV$A>}ap9}<{e`pwlw2W()R_l2N-)NQjHV2$* zvdVmmRpuM4GT&a6`R1z3w^n7ou_~jDT<3S_VNLhHp{=pa92@-4bZqbh9`kYRZqx}p zl*Uz#eFc&%IesY5ksxs_oycS|S7Cm~nm>Z9`>Z^3|MS$a&ezT6J0(@dFANKYe0L=$O`h)_Ni z7ZG`KRZmF1oD|AEFJ@1H`91RBTFXoPubfZuxkM@HxazqKUl*|}67x+&5s`wcZaz|b zBGJ62#9_=1`91RBDu=(q^gw=`l#)7+JU2!DoEsAC$Wug=!&NsGd|485kQHC06cH)7 z%DS?lcH>%2R^wV-%PY2`-ZtvMRr`**@R?8jj-^Ee545X@NWnG!XchIp&PGYUIds5# zs7Kg0Z&k)I3O1NjMowH8=y3y>aP_(G(wx2Zc>~J2mHob%NY|YpD~A_CJ7VWX4$sgZohw}zA7#2pi-Z& zewCzYe7?QrB;O$-@;QpgXD7elZb!|ov}*;lpa6}t))FnY`t_F;Ety~BS}8idaqf*l z4a;}0%6x~_3{dvFlM;Nsv4iVI=F5xNx;goJ%*JqH?aG?%w%7hen?lE&r#1FnsRrS@Ol6E|KE+%$oS*`q zV;ucH&nP9=@tz`fc$x2Rci6wEt0+XI)hp}~THj~cHX0wel_euDLh_x_$}T=FEmNm2CVat|JmU=6GGF0{U-a_NYmnn;oFz&^W_WZQ@IR!}v&TF2# z=llcr^jVsij^nD?e$O&PixO6&!}g1dMWn4=GwOh=PtKtqO66M1L+n`|!}%PdlyqFR z_P!3?YOf=m_Hq_KA9sFdGQUUZTx)qredTzA&m~Gp$5q2~Ul+0D(~BP*>ov!bhO4Hf z{%lX@b>+M|tEv1Rd2roj=sgi~<(&kn`%Za7ff{jUUhiTEbqG)_F zx$>$7a-TJFa^*Uld-f$A@!~#j(V<9v&QVH!Tsbzsu&DVTMQJ)Uq5Y4f*GHHB+lO?N zG|iu-J}6#N)s(1#lqk<9M;`Lb{;A~=)#P)iD^DjzUk4czK5=E3Xvs}Oy}#1h-{~{7 z`Oc~B$3foDMA9{<7tdKW%THNGWJtrwlMIlDT4ev!@`z3MIgD0FS&L9zGN3Io%R*AC zkWJ>w`8zWX`G8`C3asO4>*APg`>2UGj)6^f`=fx37a#mBibrJ+Bd@jF=Mh`za~R!jpI)l!6IW|bo$r=fT`bG`%_6(W*6`?tc;u)GgBw$<`u98A z?jt7_r3pM3;ZRAnRZZj13sGgC9C@uzd>*keK8I0FEbGv%_VaqQmh+k8g18bb^^uo@ zeS3B(a;-Z2iDq{j;|JSSUPs;2XV#(~o=`^@Mb=Q|&VPxL<{rxz=6uNuQvJr2yla7y zJP#R_CuJ--AO^9=*;Qgx$ak4&m*!`^Wdpd2TOj0@hk)eluVqQowUVY&Ngq!oO+)4- zO;>a;k+}Tb%My~k>~lfBEvxE{Qc}`hUeXR|Z{CEqi5C5pRbQWtKh3uo<==G zR|l?t!pwsnHN7}Nd{s0xYm=KSBRdeChXA5<8E zEHUJa(_C|uVYA<;VIzy8dGqF+vv{dx`xUjFXil{Dp}=vzuS83($CtTk7n3jjCw)X0 zX5AJn;g9&w1@b8-ie3oroh=Y@?*n4m2!y+rNhL?fqlSQR zC$vDwzZ(L=y`%*~zG4Un_qG-Y`R*Yg+{G;r@|qza+%H=oF{&WZk*E=ZX2zd_^#T?<5wLr)fLqNEh76|#0At2nDEfDgxLqNEXwm`^#8Un(7 zs|7+{GX#YDWebG-%@7dos5>R~Kpt(Ps2;fIv_Qz`4*}sm-2x#$Hw1+HRtto@W(WxP z;}!_{%OPOm?wlI4i;=t9H8uwB4lS_eKgxkV%|Ium=2uSS5(Voyk7n9D1inD$1U$f| z#j%nqgZ_xgFK+xqdZ+$N^=Wk7(a|9Mn0P8k+7-1zdNAm-OeP)-@|{Vv z>KKc99-X3}Rd|neNwgC3auccRdy#p@*R>whfT~43o{YwwZ(Kg6hXVP1m6#C%QCnwQkA8ti-&-YsqBm7n=LOBU? zTtuL~^G4G?<4(^%y}*VNdaj*`T4;S7f2lk6bL!D-C^Co%YQ(7MQAVdWo!OqgQW>4~ zep9&0pwYan@gUJ&uF21(F|ZPnu^_v~kmGa|PF>n7M0IPX)z7i;P0NRVOm zrw|g|XiAjR>VC-p8W$%?(G9*!M7S=Nc%m9eyqTc9GZPWM3~!~?fX1=~28lH*3>wQ8 znDyf(p3X`lyt#{y*Ebi-Ph z%T3sCPHCV|xMK!{`Me1g2>rBuG9V27u0ZJ7+JL6@MxZjRfG$^E`#x7(mrhsQxL#*% zt2k&ZLCf`~pt!l(g8VdE*f`5NydbfF^HbL@89@JYYXOj`UXBz(&bAjMsqX|4jq3xp zOJsCH(iM^tlHsRXgr+A12FdVK7&ILrFvxLzBCxr3$t|=4!pgPiiA+GJd_LgL7fKoR|dPj1Dq;u*WbyByEI;mSnoix{uia)g$ zgZ8Xv3X-mRd-8Zo2GCRH+(aFa&uyLH#nIsCy69?1Jzb z)Ub~m8w|F)cxPqZ0R2RZ2Bb}pj2k(j0=a({K11I>jg3i2B5R4LA#0wJE~|InD!Py1 zBJ~(ISRR(e;?Tt8k`$62(?X$tmDWv@kPI0~3CT33DWMrf0)resrLAI&?PF^s%?+9* zmE;D=%2#2~EVBd#$!b_((8RO?Bcx@8EWHdlF3Js$-t}Y8{CNW#Ha}29SH}MH&A_yV z&~I#w4iZZX0}1AN**YBhth5_53CV&{8VuR49mPXfihoThPlUuuH4KEFy~Uo0#o}dT zAqR;OhjxuK<1;fehQ@ZK+aNJYRVOr?HPU{_ho@EMBqXLQC`e3K@`oH}#i0$@F;8fM z6TYn=J04VaG+? z@X~IW8#49CVDJ}Y1`oZZHF(I~lQph{WUEOV49!&nJjfN6Qen`~Nx4lzo|Qz)A@fmj zwcY+ff=xm)5@ekWSsN70xLOZJ0Oqc;an`;xvv%kwwB8sJtCyNUV&Pf>H1;eo$Z>Wo z=8hGgXBMluL9=TkFi5s#6b8)z5EvvzFZF=T?SGuHW6YYH4U^W7FZXsW1z^_fs%h1r z@$HhCH&poSh}oZc+%=Uo(`=S@Zzi8qX0G<2fQ35Bo*hJm_{K;fS=6 zaJhxsii0L}?l(uIFnUqe;n4U|#X;i_H9zRqrjAG(33QU;=q1#zGOz#Jg_AKR)oC@G zTIZ_6{Je}Gi1|GRBzn~PL8H?g&n6A}R6I1g&GE?4tKy;2YmP^TeiaXmu5&z_H?!6G z?ZcU&)D!ZwNY4=QH(RX}y~?Sdd+%FWek}D}AkY4~XkPNW`@Ws*S&)bC+sUE@dB1%- z*>o&@t{Uz)=hnlp;6(cuUEB*A5bkE*fRypKI63qrQyZ*7lFg77}ZoRSOC zJqiy<>=@e$LYm584MJ>!>-Y+*z54p9%vV=szP2j!l~tLqtIB*;RYncDw)U(NuUbuU zQ>khD2u|!{BKW`fFHLC(kuGhcCdkW8B<6KP59XQ_alK$K=-;<#ArH4mXQFw*w&sb( z5E4mz^=T8aUXbvVh-ji+>mFrf`#f;fUs~Y8>Qf?Y0+`d5f8B$APu z`7lHZC_|2uh#Q!OWEGxNYJ}>3l-6(7Tr)?_U2nFAp-I>Ud9%$m`j~_j4(gBt;XEV7 z_AB2)2oG3NT9!XDosyPKIuZGRUPRvbmA{XT@iw!xg-!S`h{ESG-1)90GsEAomz8K3fF zIV&;CEA}10;mJk%$~NXQ3&m;_`__%?b~-}AMogikXdxm?c^BSBUyCOp~?#+8c=Itn}=d~KMkG`9XX}p zh>`mukxLOne+!06C3mq=d5PWU9i=|!C>_dFnEByTXTCKOE|KZ%)T8Icyb5G`;FJ)j zgDW$JZnOB5DC4}vYAH>#(XPmYF#D&LM{G7Zu+XS0qhGH*iO1Al>!<&-)Mc|qJRWNn zHu^;5w-7|cN{dx|#Z}Ii+UbA#rw)g*eq-@9TG_?4#DWm{0VY4hY4K3w@8{&`>h-o< zBp({YiV-=jVnK%7Hw}4cNcK;BDw?;98pYo7^@&nnn<({liBf99@-RxXDg;u!ivEv& zZ;ZZ-W%e7fxC!$AN!s)~rTLEa#qaGZ9|C}6Nv}Kg*c4r%GWMnD23^Ur|HHMm9+o9# zs1?=eYF2a$^`d+I`W<;}di!sDrGZj0+SoNd?WgaM}^O!b2DqzL05QU`Rp#E=dMXX zmG}GQdqd_ANQqsL9Hk(ymG1M1%J4aiwilnid+n(;eqBCxLGQgPwY&PMj!|O`}DHAN#gC)o?1U8 zwR<@g{$gr(u@u(%;ABfdO4{d>Bd@jF=Mh`za~R!jpI$;ypSTj8_9iNuy1sgGA=_=M zx69^icoaBed%wEa1LqQppkWq*vxZxR;w$fRJauItThXmprXlohmmCd3q8pg`_Fku;~HZ15!1X zLQ=yBguAE(LN>2z>nm^E8uxN*g=`8!<_#-f%`F?IlCp7AG>*D!1*cL=u1Zawg8W_T zjOCCtC#Hp?MKW$6X-)*foo{vj@T5Z~qT5al7tNFJ5t=-tMR-1RER+~H3 zO12HP5BXm!2Q63X`SvvamJBfUd#7==WB|>WlzIGP{WL0%GH0Qq4f;bvT^6Pnvld0;&XPIzaOL@IC`L zhJYfWQN189*k=I85KtsEN*Cliq@LY|!+HA@6aQ|qmx+Q073V?+YT3Ty!da8-yxp%Y zJy!{}Aqi0BvDXzA7I766k?k+2IGO-XG*V=3}(J)u+HO5c3C_?30D{H7yza?s%eix+rjVpQA z0yR#9!PmQgCfCI&;5@s^77ygrCW>l?yQT#~ZazEa5rJ?&HL2tXdE9GrAly?-DnQ6r z3<2TJZGn)_I4951wJot_Bd2NP*HUwqLef%g&h!9|l13bDOJ!w5S?m~GRt&kQ-YR`rJ=>tqc*(z{r)UUm+hR*Yr7O5fL+R$ zeVr(nI3+z?8v@1X#wEC7`p*7u4CEYF=K%;kAFr42{z3>gQ3)MLE zznLr|;r23fQ6%(1X{>6Va4Rz;G(8*hj8@eCJ5SC{#gLq}_*`2j&N8jTX)*1pwK2zc zX=#q{(%u~3wl`Aq7o^p0T=&Xaced?5-g;W}de40ZaL+KQoB{5l1WCMjpFx-A3-XTp zbnWQdm8;DK;@ihH5i_YdfS|Or+WZBMH8pjzXCz)VEE#`oLaw?dH4z?E)`u@QlgC{O z>UzcV8cq3lQ?PCW=-H_udu=`S~Fr z+}BzlsV`Gy^+&2^7g4YOCf2g)^d6PM@h3-C6v0IqF8c`5jNaiQe~zfmnPA2 zNE95?!X1&6GX;r)C9;S7Y>R?KyMltewnag{&lD{vNHh}b;dS4x5tqvlxJRYI52gP-eCd;oSSzg;DCDPJ9Em*N%IrSx)@KrLE* z%U5ztr)MYKE*U_hcM0?c{nQJK%m`HD(EFtks7ScuGbHri3?bpp%aG9YY%JYdR=G-; zYwN^Wrd0whrd_o*=J+lx&GB8@o8x_}YpaCWwtKzxwCMGsI}YG3FsZB(x+p;sZ@gpI zj(+DI2VEL2dA{|I#eScz62>(VGpRX%puV(9IKrCvpw!e!NW5xTB^+grkE;axka$oD z_W#9DxJyC(#6 zQRCa{(Y0V!+X{|r-d1FI%yDh)FZh2p%i{fY#;&arJg&Y<@Td{11P`mP5)C5SwEmyo zq~y-4gbjA4;74|qcpmcSXSPQ#mkr=J9OAlwx#5EA962Bwp$zLy%d6f$pE z<&99ko2Cc1R$T>q9ExyK|x;7q9AFs zpdj=1PZcvo&-RBuZ{0{U)onl@WQ|krMT6-E#nDnqtht<~xs&B`kEE)~H@`wB=<&RU z3LTXSm!ow?V?Pq*ysDq9>9HA-YW`~`gQmJMHQcz$+t+o1s=Cxmyg>?ssq1WOm*>%? zj&aUr z;?9F@XdID-$Ry;0O%!l2k4U(cPcd?J5>0;C$d9xl$Sad*B_x%X0@fDeE$(9f#@dVv z(COEYeU*&VkkGV@c2mc+rN=HGS^^kZ= zCRWIU9~womr{MnGqymIo_^=!ZH}ByoN66hw6mx{z=aC5r`A8E*Al!3XAmj~0K)Br= zm2!l9x`|?ra9?aH(mWqbl!$h%YxLuD=K*-yeC<5W;osfW#yO}5g;r3{OkhdQK!tK`r zA@4E-oU6kt-Pkm4?1#y-Er&eukk~M7#q-FYyY}`ESuF;+r$lB|ih39PRAvomVcw>HZQjo*bRmkavFW-F_|CxJ4o(=(@dc)!m zd8Z$Gy^% z$bHw@nJX{e4p09c_7|>y5j@{+%x@+`|H9M13uJ*FZukyPH$HaH;T}#m=;G=7P_|`- zV2>l?jfKtG>sE(CkbL8QE(wCy-`^)e^0&vhBnTEi$R|PaJF~r1V{d%vhPS?S1M|Du z%rM>fk+aKmqqAYA6j&-2noJqNZOmj-3U9ONhBw-D17C#orZN!VgHj3v*mX*Q07FkH zyrrib-iBj;dFl3eO#RJf(Ykd?uN6m z=@P-$?FQ}?9$OMuw?4W$Z%OSPZxQVs%;Iad7H{u(+i352V`%Sqi%28bn?;+%+eS*_ z4Wv!ttt2JERG4tvB;I|scf8fKcf9GOV!ZvdNxTuIB;JzRB;K6bJ8B*IpEI2NR%aS( z`wufJwQ}fRm`pqxb)(iE5^8GHHPxB!`rgDVt89tR}5;)Y7A;^Ydc$3V^CXjAqKTqYdc$3S1e-7 z>PoL}Sv}M*f$25(w~6Obb``yCTKyqoE=7oV+{gkv3 zGYNT`iKLR-PJ{Vv>%BH6gZZ7+Tr4NdG8 zk#Lt~Na$~wEF$4TXh+w)W;^ciU%R9gx6 z=?n>d=@1fbq0MKSCp2adONV=WhJ+@zj7YeTXGmy5%7}zx7S+;yXsI&q7ws3=_0RzS zN1K7muRCBf`9T5vA=aYxg2q;IJTh!X@z7XIjz>1migNs1Z7I*Ai$&%5E_RjUyI5C_ z?_y&)zKf;h__^9!{1K9H0EBP+M0FG_n67*)-{1i5(8 zpo?h&82BJ!&x5qb9=BRy)P+8mDZod0UY&9gc77gDt2b z9O^gsDf+e7l&D%;OH@s79yMMg9^G%sl2s$%xaJx`MjOX#q@1d2-*zfdWxaY$iK=PD zqsD8*qep239M@bU$Ovu6Yowe>YTr65Q8kT}sG3GRYP?1~dXz@Mam_V?Y@zw%aT@72 zcyDIO+B*m}RH=~~s?tIwnzTyu>eqmAP=!sJCXP(LtPqRM*pn-W#i zh)0drh)36KL^T4AYpxMwv~j#fnubFuoP_8%hYr{m|HM7wT&^-d=jn?Tq`j9NtB`Gm zb!k(b#6jp&H_Z{2hH@o%@gObYu?NR0@E~8S!eNUG?U8(~dTn0hFljkSL6B>bXc}^D z5*-iO7JW+NixOTDO&ny{c2x!wQW~hzK66AX4?AHsJmFeOFSrtatUD{k)qpWZ1J%3DyaWs ztERW4)zdPzUU~8&D0U@ZZCjQiVx97jw!I=EU$N1rOni0Y?+{x>*^~-Gs!U~qko6r; zcY=^jQXcOF;g77s?0W_w8=eHkLC97E@nI0MKS0zTgep=O6e4 zMdyF>!tM*je8AGH3ZSXF1WHf8BJTSQXa;S_@8!8G9e)K-K3`*be<&*h`ZI04At_cg zH(#~tZXYfCU2iTBd{qwW4%XvMxgG;N`;_|p(7ZW_4ZF& zRFrX(JTOr}j~E!ERc%(G%68&)%1hfXzBbhV*oI2&q)v!P}<8)}BLAsJ5g zaDGEFob2KJhGaO|!}$%hhw~fK!};x>R;rB54b@3?s0Xr065T(;JT9j&;R&|eV|#QA zebCy!0|M+V)Cm2XQv6SW7S*LV3f4Xojo;T5xmXWMOW4DPnK1$WzIbpniuH-u3s6^;W$> z|M`8QOg>Zw`R7NrFzEeECflx%E0XAB$cyboV=Vys_eWE}$&d%y%f$+VUScvS0P<-` zbTTBpttkn0zG0hzDue!s$)r`xVZ4Q)FlgRr5f~&>ox;kw?qudVwh|Qv&07hQ8zhh8 z6vmu5IJQ+UH2aLwdPtVTk{eSe8;_bB#?9+lDr27Gy_jBeG9)vb!l2t(?&NZoOCQZ( z;DiEfo??qkWsDv+I#dSDaFU8JA)Ri+Nny-AOfAxSNM79vC0LS6?J639WUi3{Ab*}v z%ODxTf@02DVnbN-hi0!us=TJEP4 zZIqu+ROTlXm3iM4o<^w0oS5K*e(pOxeEa+?y(eCCjV;Brj?gbQnP?tzAKTuRXC9Ep zm`GDXZ%(k2Ar~YUyb|*0%mqWAd0!mqO33w@zlDC6$)swK-%X;GkdMn;F!ZY)oC<)f z`P&C1-?|c#jcc(T$m?2^_rRhd9Pr(3xuF_@#sdqibigZdz<5?c;aFRbxzc+~QHFPz zk`RCS0(+ZPM3DGRtr+y1AD#3A`2iCt3>x<;xk2J-6;`_1^hq4n3!+BIao$&8-ua5C z^t~(by}TPHHG^a)S`tD&COOcRkmH=Twh6Dzf7aBh*Ng?r>niQINTVRkUE^9q6 z^h1*WTnUM{)!d-lsJ-|!lES>3l|s9CS$p0bBh#UG3&f#D>3GjN#;f8%|2*@9(DzGz za24eJlV};_NlCN{a&?v&^yvvU3HkhcGgwza)|}ZPS?~zmx~^5YE}}zKG<55yR(U_A zFz={ThNt?Zg@Ce3fW&zz%zH1D;l7?=iyM_eKgDD+EO2Q!D1|}4Gx@J&koYXA2;_KQ zwTjJ;yICkGWkTY!Bs0kI?rT-)zE*kn74%_WaKve;3>vQ`g+g}qRs@lf6mp!m(o(&< zQknNxD)SCYWq7QblVOZ24!RxhtGa|$(uywQJ^sXFel$vkd3}UeM>b>nCD|~9KD!-; zkUvbK72}2>QG>RB+?boPc%j#+Vqm!HS{GZGCmQK8AtMKKbycjqhkUZqwh5*LT2{=?aubkM08e~h)#rL|3T`q zY4wGF#Bsu)(DpJa*g#O3k789;&H^WP9RkFx>@$s=Z~(bk{e z!Q6j+R2-z~%WDWOx9@+>Z&t}sfo(l_tUM)P=NubOH@qRI8$YtR3v*335MZ;E4UY|{ z1m2R<4Zr9~H(2=)gQXh?K55IJbb|-ON87$my20v*&@J8Y<00MfgCgDF0WJ@b(hWa# zr5ns&%q{5#+alO=x`BXQXq4+$94Ub}^>l-^2m2xE1_CxkC<31C=ac{ed(b3+XY`~5 zeh86(S&Lzm68N!{Zt%#F$A;-fK1!6n#SV@%pP%xKzNgvatW-FH1ME|}v=9FKf9ZxR z0*2-MW_cK{b03vA%|XWIXVMe`Mjx8`V-7x|!&E5*Y<1Eb@a$uz1PDeBV@7LAG56uh zzGTV@0izHV!m}Hh5+L9y4+-Ges!RzG?6xeLE&70GBU4Vbe)|Q%Zjn4JrHIoHJlmY) z1kYY)DjESBAS8g_u4_p-ZP&Ma*+OO10nce(itg-kZmEx{YJNjy6BA_=8-80$Z{k>R z2O3V`3a-g^C!vW?jvml2zshvC8~( zt1@QV+3xbi?(~zT=ID)CWqyuSnHp36xBIwRu-7Y1GVS)y)gj{RJwbjr ziB5!M8%`eTvfccQb`N^PYM67~)2`Wfmn%Y_TFw?;wdk1lPW5#GbX(4u{SL zSjdlkX}rAD&u?-CoZk)zLgETecS|9VEbZgTP}cLD?$+Aa(w+~IM<6FPINdEkNEROv zNLa$TZ2>~^=rRJ~9^F2~f#g|FP#D_*Y?MicYy_}1Dk4atoRE}#0rs+k5QgQ6B!*;V z5^#hshgitcYmS2?q7mGP@A|T4XOR$cWC1`}AB4p6gyKQygXSRg!$1a)44)kzLN||> z^zJHyL~H``=J8^?#|)DHvE!vZ@%}EGEI2WvQyB|Gj;g2(H_B-cmEj0E`k^uoc;E?D z=11%3(#5m;!bRlE7LhMnM80GZ)eEM{-%9i3s2)4y-LtLx0g(`8_O#UC#WT-yxwa!VyA>JdKYm z@_R%ZJcJ-WLJ#7MJPqLn3())?GU9ylgJ(gSry&9%+{o`C<3R@b!Lz}Vr|}yt`8_sV z*a^(<`Ne2{&u^jR_xx5$e$Q|JQGdn~*IoL38D|qsUyrI=xDzQw_+_n(Slug3+b!f$ z9$L|qt(zHod>Gawa+_2Z?_EVIcIKb-id1Ze=e#^vidZ-vD~VM4 z7;a!E;$seQ?`@@5y=>r@mV%XjW1-2@Cy|Ohz_Id-rNOZd6{++P+&!1&{sHc&Rw{L1 z(aHlS$w7Juj;BpAU$~XaQ@(K_AWxoHmfz48>6RB%F2R8SBZ6ddAsuYJ2^>TYq? z2&fHe5{UVTC>k*;IK)Jb#@T3`jYClMbwC9%Q6mm-=lgs(-B-cb#*~&-~m)!!mm@PnCK6Y*l{d=Pc|oYcW5Sd6=b`Day~# zF<)ShH1kK9=eiZVyrQ4FexI^>r)SBN0j*OlW!+BiV@)mt!2gpgbVi#0*Vp2HWRiH0 zwU-~0M0?#zS~{HYaNSBe@o?Qr+Qwo=RK77POC>+J1goc+=1H~?^XL!@XANPxV@*KhA5Fes|R>{Q+L9^gFIr={H=h(znm9HKH!{ zeH*r00(Z)-I^Tk-^9`sv-+rp|&8IrwdaCn{*V=P!r#jzss`D+UI^S@r^X;ZO-)yS$ zt)@EPXsYvVraIqbs`D-8S7HA1l=j_DEnU}Q*G`LRi*Tcbb7ncf@JFM;nMS%SK;F0J z$dDE5CxJx@gpgIiAx?mq_w7iOQEPDqpmy ze95AsK%RXCZ>3xwl z_nCXcV8Uj10xD{1$1=RE38N6>VENg{+={OJ>^t@uE|#D9_jBcEex+A_=2v{>XMUAe ze&*j|m7lS~fdMPX3ajU!=PE9wFMP@2-6> z5Ujju^zkp+spncg<^?Nn4}G+YcIrD@BAoZJf}Q$y)x zbg9JpDVx)j%{x}nO1qKb9c#jp+VwZCzGv%7&-Yi^boek2_90VF2_|M3`h4FELs8`@ z<@;0l*>y8a)9}7($onhb`${hVJ7yTU{U!5){@304@=>Vip|cAy^*?(a@e!WJL?7Ep zd)J$H zaUhywd@n10i9}@u@n0$5nOSmo)x*i?S*321VuV1zQI-|F<>);GW!XtaDa>VA&r` z<0wNyGzs|bH!(=s7iFWbvHUI#<}B2qsH_9mk*~>PqM81ooMBs=1KFOm%(XdK`v~~m z8Gz%VmKNnox%hkC1#<~4;bDmv%o!he>NhxvNd8QO3{XBmf-y_Jlr;S(j4%s*yY)#or(^tQ`XK1&(YQ1>e?4a8m39 z+W;ZK(P4s;Vs>bu{_R0>jrRupazQdciXZ=K4fsI6u6JD5JFKtJ8FC1tpg*LrB1L~l zAxP?fSMT8Xf;pgA3w<{H>X~Tkacq@n>yE2h-y5furSJwx zb8T!h-tg3%W9M19-@pWgm!DySXJo5y6-Pdvx?c0X$lo%;1$Yn@Im+kj?Mu{`<-hQ? zc&r5qe+_BiVIyD1W<^%k`G3lRAPXs?zN`b`#wwxwjAa1}fbz4FZI$)VulF_2#O@GQ z`C5D0=aBksf63jqQ!1@qKIL*~=M}qegX9D3GgFH8f6do{ee_7(WDn=#M#l-F zfj`10gBnf7-<=D_xpde?p1te`67&#@Oq}hg&aXPAA9i_*a?a)riptvyPUEzyH#s^D z-MA-1c%5^=VHaH^8isrzm)+EdbNQLy6_%g*yOdDt> zh8P(8Z4V}%Z3*jZaM*y)Ap->bvU3#Aen);8VAxQgQ$DT6@rZOQPk7MN+TV@Q?$-Mc zn;f#F?FcD)R=dmf-6lbOhe=xBRg%_slBA_MIe$o6Qdim9D{r7saQ=|sq=<iJGXw_;ee5YK3PcK$ zZuFH|YO`!H)wxyrGFzoDNta{*;dp4hqr6LLAAH&0Na2@jq?U-dBuheC;)-sAjL6Uu zEF9Ix+WzL+Shcm(oVRtJl`9-fPj(mfjcH4dVhl1RLb| z{^ro1KxS&>=YFMS5c!dh_6KkMWZ5eHT-hr9RM{$-DGB3N$y7#kwo2lGWo4^`yKZKY zUvGvwo;4Btpc;#TvH__$wJbmLl`TK>buK^iRWCpD43wXFBFfJ^ALVDBmhv-L;hC;) zlFH9^kquA$)SQH<>|06kQ*)w~1t_V>AD;7UCJUa&WWh6-w4OWB%GC|eTC(f;N)}*> z_b15$Dc+wXEGaHxCoHMSYuTP_dF$vv`X#Q+tD=^7exHT>X2sRSEZGR;qLMoU;%LQCIMdT!x=- z)bcYL@iz@=Z94ha1~Pt5hOGB6g^TwsY4M6+`prX2S0ebuZd#hjI~BAX6EL}8zugCV z_gf|2!)dGZ<3p=#IV=9h%Ac|d23PGH{U)MleQCm#Xnk=>TNKrb)5_D8w6B`#d|9gV zC8^Grqv^NVZ@N+^x0S&3z3k^2-N%td)&03yeVIL_Pa#s!jNDJ5GAG-@SarTc)%jwS zAaFG2&`L*nm(n=+GH;A9qDmDJaY=p>hi3SvZkvI~`ZE0CoTjPmZ?27n+YGuV?vw)y zCMdl8jGFP(!Nc1UrerU3Ys4PR2@H+ z!&kS%d1FTY;aL0h)|WNU{gboCl=WFFQ?#EvdrazAo%W?qs(eWn_=z8WA|_ejM+cdv zL@O4&=g9)U^27JelZBDJgycF^vM^C4Nu)Z~bz61weFJ}0Tl=6|Z#R9>%G(_^r}_pF zmA5D=Z*EyL05n&D`l7W)OH_WYervR{vKsi80?r4629|GL)%gaS5`dWmZ#Ok?9Av({ zgpI?=`?2)EsXbeDi+!s)3$dcDOH*yGqzNf-yj}Tau*TO+b>61x{J+^jsFf9}FL-Kn z96T#3tFedbvu{t03g2$3qhsI7I(Qg8EeYOY8Unn{q{Zrx;i9&?>XtGv*zaC-LzZf> zi?_m)Xnh-{R`+)0c;!WBc(bk2TWyuz=(1)IY%as7dtb}f=(y!qW~x*K6?A#uo@=^*h$G9Jb62l8V6``C>e8gjO2RAcclr69{!w!ZKl1jh z`=udWR8da_7m!Ekr zmbaJHvBuvu5Ra$+l>=`*VZB}5t9h%k>h+m}h48WlFQU5D<#@FCBY%s*<7Ttft1Mzh z&B-2=R#Ky8lme%rXYteL(!=-@Vf^&DsQB^ei}D}0+vfkGfS^8R$80=x@4`>^?Q;^5 zx)t%JS+xz3KiDqDyyGk6ucpkl-;BrQRrdQjL@$27(0;NVJ%Ce4CKi^=gAB76mnr%^YW zom&MJAGIcu0OeQo?`vN_6V;t<$-qZ% zY#%ev&a+ zdNU1wGlHkO=YL8l$hxBOplKf0$k^lMmBpag+2$}?EIh!TGtCoM`}XNjr)Sg=!9<0v z4i$aT)}v&S|Gm$qHF#xnW%jSLS(m(9g%Xs_NjG-@W^-Tr)4NTkAk{$~JVnET{>5+|kM$pRUsc#erYt!nMWo2G_zzlE zfqlfp&vdFG4z1Lmr^~L8xvb8<7740D?y7j#DiGw);K=(EDz{XN(rxyi)@^o^5L>>> zmSv23?e!~fXPdtg#K(+QitU{iKa(!lK#QNceB~-;Hmc!tQSNlsa$q5~o}hm<^$I?S}fBjS-0KvHLPK*T?o z0Fruc2Sj|q1d!B+J0Rl6CxE1W*Z~oLF##mC=WTM}BCa)63S3eLbik;W*WGfFZb?qH zS5LRH9ccfq?t#{y>A5;e(_dFvpHm$&T~rS75h+Mv-bdTa^Y++(yo+g^rmFE^L^T*| zBybR^&2__0(=gTuJ%|i6i5^mnH3CFrph-Ydj5Pv8WS~hvQj9eML}Z{zKvIk~0z_n> zNkCGJH3CFrph-Ydj5Pv8WS~hvQj9eML}Z{zKvIk~0z_n>NkCGJH3CFrph-Ydj5Pv8 zWS~hvQj9eML}Z{zKvIk~0z_n>NkCHcX#x5^x_sqISw-nuJsmCk&&xC&^|QA~!<`Nh z$PcCg8ul^Xkk$=}bgJS?$tkdcbz!lUw>eJaa^r*$gU z3hy(O+Gn=^VFyDb+7*WU@I0AqMp`S_To4 z<&YM!k8gopQ*_VfVPhT<)}>TLxx@1abm-@)%1p}n_V zHbE)V9QQBQvd9nangfwGkkuRFcZziq^76cJokwKKm8ll7zah8x^`oB`n|NeqX7LR% znuwzIKE7CiBGaN0jEMb>yM0*WZl`g#+UiMz44IXc)B%yTuELO+u>{71#cE63MeLiy z_S7I)p$G5wuZ)r|cK9@S5;+emA_w`8y2wE!Tx2$T=Tk@=U&IbF+a{?9BFjOkE@HPb zJaqhQv+_cF$|4GpP}3;|ISM=(1WlMq=uwRs8SZl^ZCpG7n~Hfab%Hg8%lWH$QRICW&t z`^Z+wl3M0$d(S`o`0@G8skrYo*)y@Vh)kel|F{}%3>5pX3r%sM50&=sDpS55zD?;VaSZhVhxdCRv0pYEwDPS zxA?f0N)gs^wK0LQK6R6^7k3Oc?O|n%?mb=PU`AWC1!!4Dy z(k`1f7}MG!!&r$&2XhgNC7#~1R5sU7vRVA$rd?%IPIP~pB+C2i7i}CAe1g1W

p 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

MwCOLf| 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 z

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 literal 0 HcmV?d00001 diff --git a/cosmic_profiles/for_docs/cython_helpers/helper_class.c b/cosmic_profiles/for_docs/cython_helpers/helper_class.c new file mode 100644 index 0000000..b7c4528 --- /dev/null +++ b/cosmic_profiles/for_docs/cython_helpers/helper_class.c @@ -0,0 +1,23349 @@ +/* Generated by Cython 0.29.21 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "depends": [], + "extra_compile_args": [ + "-fopenmp" + ], + "extra_link_args": [ + "-fopenmp" + ], + "include_dirs": [ + "/home/tibor/.local/lib/python3.8/site-packages/numpy/core/include", + "." + ], + "name": "cython_helpers.helper_class", + "sources": [ + "cython_helpers/helper_class.pyx" + ] + }, + "module_name": "cython_helpers.helper_class" +} +END: Cython Metadata */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.6+ or Python 3.3+. +#else +#define CYTHON_ABI "0_29_21" +#define CYTHON_HEX_VERSION 0x001D15F0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__cython_helpers__helper_class +#define __PYX_HAVE_API__cython_helpers__helper_class +/* Early includes */ +#include +#include "pythread.h" +#include +#include +#include +#include "pystate.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + +/* Header.proto */ +#if !defined(CYTHON_CCOMPLEX) + #if defined(__cplusplus) + #define CYTHON_CCOMPLEX 1 + #elif defined(_Complex_I) + #define CYTHON_CCOMPLEX 1 + #else + #define CYTHON_CCOMPLEX 0 + #endif +#endif +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #include + #else + #include + #endif +#endif +#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) + #undef _Complex_I + #define _Complex_I 1.0fj +#endif + + +static const char *__pyx_f[] = { + "cython_helpers/helper_class.pyx", + "stringsource", +}; +/* MemviewSliceStruct.proto */ +struct __pyx_memoryview_obj; +typedef struct { + struct __pyx_memoryview_obj *memview; + char *data; + Py_ssize_t shape[8]; + Py_ssize_t strides[8]; + Py_ssize_t suboffsets[8]; +} __Pyx_memviewslice; +#define __Pyx_MemoryView_Len(m) (m.shape[0]) + +/* Atomics.proto */ +#include +#ifndef CYTHON_ATOMICS + #define CYTHON_ATOMICS 1 +#endif +#define __pyx_atomic_int_type int +#if CYTHON_ATOMICS && __GNUC__ >= 4 && (__GNUC_MINOR__ > 1 ||\ + (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL >= 2)) &&\ + !defined(__i386__) + #define __pyx_atomic_incr_aligned(value, lock) __sync_fetch_and_add(value, 1) + #define __pyx_atomic_decr_aligned(value, lock) __sync_fetch_and_sub(value, 1) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using GNU atomics" + #endif +#elif CYTHON_ATOMICS && defined(_MSC_VER) && 0 + #include + #undef __pyx_atomic_int_type + #define __pyx_atomic_int_type LONG + #define __pyx_atomic_incr_aligned(value, lock) InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #pragma message ("Using MSVC atomics") + #endif +#elif CYTHON_ATOMICS && (defined(__ICC) || defined(__INTEL_COMPILER)) && 0 + #define __pyx_atomic_incr_aligned(value, lock) _InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) _InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using Intel atomics" + #endif +#else + #undef CYTHON_ATOMICS + #define CYTHON_ATOMICS 0 + #ifdef __PYX_DEBUG_ATOMICS + #warning "Not using atomics" + #endif +#endif +typedef volatile __pyx_atomic_int_type __pyx_atomic_int; +#if CYTHON_ATOMICS + #define __pyx_add_acquisition_count(memview)\ + __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) +#else + #define __pyx_add_acquisition_count(memview)\ + __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) +#endif + +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* NoFastGil.proto */ +#define __Pyx_PyGILState_Ensure PyGILState_Ensure +#define __Pyx_PyGILState_Release PyGILState_Release +#define __Pyx_FastGIL_Remember() +#define __Pyx_FastGIL_Forget() +#define __Pyx_FastGilFuncInit() + +/* BufferFormatStructs.proto */ +#define IS_UNSIGNED(type) (((type) -1) > 0) +struct __Pyx_StructField_; +#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) +typedef struct { + const char* name; + struct __Pyx_StructField_* fields; + size_t size; + size_t arraysize[8]; + int ndim; + char typegroup; + char is_unsigned; + int flags; +} __Pyx_TypeInfo; +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + size_t new_count, enc_count; + size_t struct_alignment; + int is_complex; + char enc_type; + char new_packmode; + char enc_packmode; + char is_valid_array; +} __Pyx_BufFmt_Context; + +/* Declarations.proto */ +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< double > __pyx_t_double_complex; + #else + typedef double _Complex __pyx_t_double_complex; + #endif +#else + typedef struct { double real, imag; } __pyx_t_double_complex; +#endif +static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); + + +/*--- Type declarations ---*/ +struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers; +struct __pyx_array_obj; +struct __pyx_MemviewEnum_obj; +struct __pyx_memoryview_obj; +struct __pyx_memoryviewslice_obj; + +/* "cython_helpers/helper_class.pyx":9 + * + * @cython.embedsignature(True) + * cdef class CythonHelpers: # <<<<<<<<<<<<<< + * + * def calcShapeTensor(float[:,:] nns, int[:] select, complex[::1,:] shape_tensor, float[:] masses, float[:] center, int nb_pts, bint reduced, float[:] r_ell = None): + */ +struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers { + PyObject_HEAD +}; + + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ +struct __pyx_array_obj { + PyObject_HEAD + struct __pyx_vtabstruct_array *__pyx_vtab; + char *data; + Py_ssize_t len; + char *format; + int ndim; + Py_ssize_t *_shape; + Py_ssize_t *_strides; + Py_ssize_t itemsize; + PyObject *mode; + PyObject *_format; + void (*callback_free_data)(void *); + int free_data; + int dtype_is_object; +}; + + +/* "View.MemoryView":279 + * + * @cname('__pyx_MemviewEnum') + * cdef class Enum(object): # <<<<<<<<<<<<<< + * cdef object name + * def __init__(self, name): + */ +struct __pyx_MemviewEnum_obj { + PyObject_HEAD + PyObject *name; +}; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ +struct __pyx_memoryview_obj { + PyObject_HEAD + struct __pyx_vtabstruct_memoryview *__pyx_vtab; + PyObject *obj; + PyObject *_size; + PyObject *_array_interface; + PyThread_type_lock lock; + __pyx_atomic_int acquisition_count[2]; + __pyx_atomic_int *acquisition_count_aligned_p; + Py_buffer view; + int flags; + int dtype_is_object; + __Pyx_TypeInfo *typeinfo; +}; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ +struct __pyx_memoryviewslice_obj { + struct __pyx_memoryview_obj __pyx_base; + __Pyx_memviewslice from_slice; + PyObject *from_object; + PyObject *(*to_object_func)(char *); + int (*to_dtype_func)(char *, PyObject *); +}; + + + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ + +struct __pyx_vtabstruct_array { + PyObject *(*get_memview)(struct __pyx_array_obj *); +}; +static struct __pyx_vtabstruct_array *__pyx_vtabptr_array; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ + +struct __pyx_vtabstruct_memoryview { + char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *); + PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *); +}; +static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ + +struct __pyx_vtabstruct__memoryviewslice { + struct __pyx_vtabstruct_memoryview __pyx_base; +}; +static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* MemviewSliceInit.proto */ +#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d +#define __Pyx_MEMVIEW_DIRECT 1 +#define __Pyx_MEMVIEW_PTR 2 +#define __Pyx_MEMVIEW_FULL 4 +#define __Pyx_MEMVIEW_CONTIG 8 +#define __Pyx_MEMVIEW_STRIDED 16 +#define __Pyx_MEMVIEW_FOLLOW 32 +#define __Pyx_IS_C_CONTIG 1 +#define __Pyx_IS_F_CONTIG 2 +static int __Pyx_init_memviewslice( + struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference); +static CYTHON_INLINE int __pyx_add_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +#define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p) +#define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview)) +#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) +#define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__) +static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int); + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* StrEquals.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals +#else +#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +#endif + +/* None.proto */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); + +/* UnaryNegOverflows.proto */ +#define UNARY_NEG_WOULD_OVERFLOW(x)\ + (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) + +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/ +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* 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_string.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, 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)); + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseNoneIterError.proto */ +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 +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) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +static CYTHON_UNUSED 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 +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) +#endif + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* ListExtend.proto */ +static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { +#if CYTHON_COMPILING_IN_CPYTHON + PyObject* none = _PyList_Extend((PyListObject*)L, v); + if (unlikely(!none)) + return -1; + Py_DECREF(none); + return 0; +#else + return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); +#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); + PyList_SET_ITEM(list, len, x); + __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 + +/* None.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); + +/* None.proto */ +static CYTHON_INLINE long __Pyx_div_long(long, long); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* SetupReduce.proto */ +static int __Pyx_setup_reduce(PyObject* type_obj); + +/* SetVTable.proto */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +#if PY_MAJOR_VERSION < 3 + static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); + static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else + #define __Pyx_GetBuffer PyObject_GetBuffer + #define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + + +/* BufferStructDeclare.proto */ +typedef struct { + Py_ssize_t shape, strides, suboffsets; +} __Pyx_Buf_DimInfo; +typedef struct { + size_t refcount; + Py_buffer pybuffer; +} __Pyx_Buffer; +typedef struct { + __Pyx_Buffer *rcbuffer; + char *data; + __Pyx_Buf_DimInfo diminfo[8]; +} __Pyx_LocalBuf_ND; + +/* MemviewSliceIsContig.proto */ +static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim); + +/* OverlappingSlices.proto */ +static int __pyx_slices_overlap(__Pyx_memviewslice *slice1, + __Pyx_memviewslice *slice2, + int ndim, size_t itemsize); + +/* Capsule.proto */ +static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig); + +/* RealImag.proto */ +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #define __Pyx_CREAL(z) ((z).real()) + #define __Pyx_CIMAG(z) ((z).imag()) + #else + #define __Pyx_CREAL(z) (__real__(z)) + #define __Pyx_CIMAG(z) (__imag__(z)) + #endif +#else + #define __Pyx_CREAL(z) ((z).real) + #define __Pyx_CIMAG(z) ((z).imag) +#endif +#if defined(__cplusplus) && CYTHON_CCOMPLEX\ + && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103) + #define __Pyx_SET_CREAL(z,x) ((z).real(x)) + #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) +#else + #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) + #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) +#endif + +/* Arithmetic.proto */ +#if CYTHON_CCOMPLEX + #define __Pyx_c_eq_double(a, b) ((a)==(b)) + #define __Pyx_c_sum_double(a, b) ((a)+(b)) + #define __Pyx_c_diff_double(a, b) ((a)-(b)) + #define __Pyx_c_prod_double(a, b) ((a)*(b)) + #define __Pyx_c_quot_double(a, b) ((a)/(b)) + #define __Pyx_c_neg_double(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_double(z) ((z)==(double)0) + #define __Pyx_c_conj_double(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_double(z) (::std::abs(z)) + #define __Pyx_c_pow_double(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_double(z) ((z)==0) + #define __Pyx_c_conj_double(z) (conj(z)) + #if 1 + #define __Pyx_c_abs_double(z) (cabs(z)) + #define __Pyx_c_pow_double(a, b) (cpow(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex); + #if 1 + static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex); + #endif +#endif + +/* IsLittleEndian.proto */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); + +/* BufferFormatCheck.proto */ +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts); +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type); + +/* TypeInfoCompare.proto */ +static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b); + +/* MemviewSliceValidateAndInit.proto */ +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); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_int(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dcd____pyx_t_double_complex(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_float(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_double(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_float(PyObject *, int writable_flag); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* MemviewSliceCopyTemplate.proto */ +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); + +/* 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); + +/* CIntFromPy.proto */ +static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *); + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/ +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/ +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ + +/* Module declarations from 'cython.view' */ + +/* Module declarations from 'cython' */ + +/* Module declarations from 'libc.math' */ + +/* Module declarations from 'cython_helpers.helper_class' */ +static PyTypeObject *__pyx_ptype_14cython_helpers_12helper_class_CythonHelpers = 0; +static PyTypeObject *__pyx_array_type = 0; +static PyTypeObject *__pyx_MemviewEnum_type = 0; +static PyTypeObject *__pyx_memoryview_type = 0; +static PyTypeObject *__pyx_memoryviewslice_type = 0; +static PyObject *generic = 0; +static PyObject *strided = 0; +static PyObject *indirect = 0; +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_14cython_helpers_12helper_class___pyx_unpickle_CythonHelpers__set_state(struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *, PyObject *); /*proto*/ +static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/ +static void *__pyx_align_pointer(void *, size_t); /*proto*/ +static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/ +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/ +static PyObject *_unellipsify(PyObject *, int); /*proto*/ +static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/ +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/ +static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/ +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/ +static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/ +static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/ +static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/ +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/ +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/ +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/ +static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/ +static int __pyx_memoryview_err(PyObject *, char *); /*proto*/ +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/ +static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/ +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo___pyx_t_double_complex = { "double complex", NULL, sizeof(__pyx_t_double_complex), { 0 }, 0, 'C', 0, 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_float = { "float", NULL, sizeof(float), { 0 }, 0, 'R', 0, 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 }; +#define __Pyx_MODULE_NAME "cython_helpers.helper_class" +extern int __pyx_module_is_main_cython_helpers__helper_class; +int __pyx_module_is_main_cython_helpers__helper_class = 0; + +/* Implementation of 'cython_helpers.helper_class' */ +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_MemoryError; +static PyObject *__pyx_builtin_enumerate; +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_Ellipsis; +static PyObject *__pyx_builtin_id; +static PyObject *__pyx_builtin_IndexError; +static const char __pyx_k_O[] = "O"; +static const char __pyx_k_Z[] = "Z"; +static const char __pyx_k_a[] = "a"; +static const char __pyx_k_b[] = "b"; +static const char __pyx_k_c[] = "c"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_com[] = "com"; +static const char __pyx_k_h_i[] = "h_i"; +static const char __pyx_k_new[] = "__new__"; +static const char __pyx_k_obj[] = "obj"; +static const char __pyx_k_r_i[] = "r_i"; +static const char __pyx_k_base[] = "base"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mode[] = "mode"; +static const char __pyx_k_name[] = "name"; +static const char __pyx_k_ndim[] = "ndim"; +static const char __pyx_k_pack[] = "pack"; +static const char __pyx_k_size[] = "size"; +static const char __pyx_k_step[] = "step"; +static const char __pyx_k_stop[] = "stop"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_ASCII[] = "ASCII"; +static const char __pyx_k_Mencl[] = "Mencl"; +static const char __pyx_k_class[] = "__class__"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_flags[] = "flags"; +static const char __pyx_k_inter[] = "inter"; +static const char __pyx_k_major[] = "major"; +static const char __pyx_k_minor[] = "minor"; +static const char __pyx_k_nrows[] = "nrows"; +static const char __pyx_k_r_200[] = "r_200"; +static const char __pyx_k_r_ell[] = "r_ell"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_shape[] = "shape"; +static const char __pyx_k_shell[] = "shell"; +static const char __pyx_k_start[] = "start"; +static const char __pyx_k_center[] = "center"; +static const char __pyx_k_encode[] = "encode"; +static const char __pyx_k_format[] = "format"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_masses[] = "masses"; +static const char __pyx_k_name_2[] = "__name__"; +static const char __pyx_k_nb_pts[] = "nb_pts"; +static const char __pyx_k_pickle[] = "pickle"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_select[] = "select"; +static const char __pyx_k_struct[] = "struct"; +static const char __pyx_k_unpack[] = "unpack"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_eigvals[] = "eigvals"; +static const char __pyx_k_fortran[] = "fortran"; +static const char __pyx_k_memview[] = "memview"; +static const char __pyx_k_reduced[] = "reduced"; +static const char __pyx_k_Ellipsis[] = "Ellipsis"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_itemsize[] = "itemsize"; +static const char __pyx_k_pyx_type[] = "__pyx_type"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_ROverR200[] = "ROverR200"; +static const char __pyx_k_TypeError[] = "TypeError"; +static const char __pyx_k_bin_edges[] = "bin_edges"; +static const char __pyx_k_dens_prof[] = "dens_prof"; +static const char __pyx_k_ellipsoid[] = "ellipsoid"; +static const char __pyx_k_enumerate[] = "enumerate"; +static const char __pyx_k_pyx_state[] = "__pyx_state"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_xyz_princ[] = "xyz_princ"; +static const char __pyx_k_IndexError[] = "IndexError"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_pyx_result[] = "__pyx_result"; +static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; +static const char __pyx_k_MemoryError[] = "MemoryError"; +static const char __pyx_k_PickleError[] = "PickleError"; +static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; +static const char __pyx_k_shape_tensor[] = "shape_tensor"; +static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_CythonHelpers[] = "CythonHelpers"; +static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_View_MemoryView[] = "View.MemoryView"; +static const char __pyx_k_allocate_buffer[] = "allocate_buffer"; +static const char __pyx_k_dtype_is_object[] = "dtype_is_object"; +static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_strided_and_direct[] = ""; +static const char __pyx_k_strided_and_indirect[] = ""; +static const char __pyx_k_contiguous_and_direct[] = ""; +static const char __pyx_k_MemoryView_of_r_object[] = ""; +static const char __pyx_k_MemoryView_of_r_at_0x_x[] = ""; +static const char __pyx_k_contiguous_and_indirect[] = ""; +static const char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'"; +static const char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d."; +static const char __pyx_k_pyx_unpickle_CythonHelpers[] = "__pyx_unpickle_CythonHelpers"; +static const char __pyx_k_cython_helpers_helper_class[] = "cython_helpers.helper_class"; +static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array"; +static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data."; +static const char __pyx_k_strided_and_direct_or_indirect[] = ""; +static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides"; +static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory."; +static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview"; +static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview"; +static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array"; +static const char __pyx_k_Incompatible_checksums_s_vs_0xb0[] = "Incompatible checksums (%s vs 0xb068931 = (name))"; +static const char __pyx_k_Incompatible_checksums_s_vs_0xd4[] = "Incompatible checksums (%s vs 0xd41d8cd = ())"; +static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported"; +static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got %s"; +static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis %d)"; +static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object"; +static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension %d (got %d and %d)"; +static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__"; +static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides."; +static PyObject *__pyx_n_s_ASCII; +static PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri; +static PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is; +static PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor; +static PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi; +static PyObject *__pyx_kp_s_Cannot_index_with_type_s; +static PyObject *__pyx_n_s_CythonHelpers; +static PyObject *__pyx_n_s_Ellipsis; +static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xb0; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xd4; +static PyObject *__pyx_n_s_IndexError; +static PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte; +static PyObject *__pyx_kp_s_Invalid_mode_expected_c_or_fortr; +static PyObject *__pyx_kp_s_Invalid_shape_in_axis_d_d; +static PyObject *__pyx_n_s_MemoryError; +static PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x; +static PyObject *__pyx_kp_s_MemoryView_of_r_object; +static PyObject *__pyx_n_s_Mencl; +static PyObject *__pyx_n_b_O; +static PyObject *__pyx_kp_s_Out_of_bounds_on_buffer_access_a; +static PyObject *__pyx_n_s_PickleError; +static PyObject *__pyx_n_s_ROverR200; +static PyObject *__pyx_n_s_TypeError; +static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object; +static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_n_s_View_MemoryView; +static PyObject *__pyx_n_s_Z; +static PyObject *__pyx_n_s_a; +static PyObject *__pyx_n_s_allocate_buffer; +static PyObject *__pyx_n_s_b; +static PyObject *__pyx_n_s_base; +static PyObject *__pyx_n_s_bin_edges; +static PyObject *__pyx_n_s_c; +static PyObject *__pyx_n_u_c; +static PyObject *__pyx_n_s_center; +static PyObject *__pyx_n_s_class; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_com; +static PyObject *__pyx_kp_s_contiguous_and_direct; +static PyObject *__pyx_kp_s_contiguous_and_indirect; +static PyObject *__pyx_n_s_cython_helpers_helper_class; +static PyObject *__pyx_n_s_dens_prof; +static PyObject *__pyx_n_s_dict; +static PyObject *__pyx_n_s_dtype_is_object; +static PyObject *__pyx_n_s_eigvals; +static PyObject *__pyx_n_s_ellipsoid; +static PyObject *__pyx_n_s_encode; +static PyObject *__pyx_n_s_enumerate; +static PyObject *__pyx_n_s_error; +static PyObject *__pyx_n_s_flags; +static PyObject *__pyx_n_s_format; +static PyObject *__pyx_n_s_fortran; +static PyObject *__pyx_n_u_fortran; +static PyObject *__pyx_n_s_getstate; +static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi; +static PyObject *__pyx_n_s_h_i; +static PyObject *__pyx_n_s_id; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_inter; +static PyObject *__pyx_n_s_itemsize; +static PyObject *__pyx_kp_s_itemsize_0_for_cython_array; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_major; +static PyObject *__pyx_n_s_masses; +static PyObject *__pyx_n_s_memview; +static PyObject *__pyx_n_s_minor; +static PyObject *__pyx_n_s_mode; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_name_2; +static PyObject *__pyx_n_s_nb_pts; +static PyObject *__pyx_n_s_ndim; +static PyObject *__pyx_n_s_new; +static PyObject *__pyx_kp_s_no_default___reduce___due_to_non; +static PyObject *__pyx_n_s_nrows; +static PyObject *__pyx_n_s_obj; +static PyObject *__pyx_n_s_pack; +static PyObject *__pyx_n_s_pickle; +static PyObject *__pyx_n_s_pyx_PickleError; +static PyObject *__pyx_n_s_pyx_checksum; +static PyObject *__pyx_n_s_pyx_getbuffer; +static PyObject *__pyx_n_s_pyx_result; +static PyObject *__pyx_n_s_pyx_state; +static PyObject *__pyx_n_s_pyx_type; +static PyObject *__pyx_n_s_pyx_unpickle_CythonHelpers; +static PyObject *__pyx_n_s_pyx_unpickle_Enum; +static PyObject *__pyx_n_s_pyx_vtable; +static PyObject *__pyx_n_s_r_200; +static PyObject *__pyx_n_s_r_ell; +static PyObject *__pyx_n_s_r_i; +static PyObject *__pyx_n_s_range; +static PyObject *__pyx_n_s_reduce; +static PyObject *__pyx_n_s_reduce_cython; +static PyObject *__pyx_n_s_reduce_ex; +static PyObject *__pyx_n_s_reduced; +static PyObject *__pyx_n_s_select; +static PyObject *__pyx_n_s_setstate; +static PyObject *__pyx_n_s_setstate_cython; +static PyObject *__pyx_n_s_shape; +static PyObject *__pyx_n_s_shape_tensor; +static PyObject *__pyx_n_s_shell; +static PyObject *__pyx_n_s_size; +static PyObject *__pyx_n_s_start; +static PyObject *__pyx_n_s_step; +static PyObject *__pyx_n_s_stop; +static PyObject *__pyx_kp_s_strided_and_direct; +static PyObject *__pyx_kp_s_strided_and_direct_or_indirect; +static PyObject *__pyx_kp_s_strided_and_indirect; +static PyObject *__pyx_kp_s_stringsource; +static PyObject *__pyx_n_s_struct; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_kp_s_unable_to_allocate_array_data; +static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str; +static PyObject *__pyx_n_s_unpack; +static PyObject *__pyx_n_s_update; +static PyObject *__pyx_n_s_xyz_princ; +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_calcShapeTensor(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_nns, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_select, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shape_tensor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED int __pyx_v_nb_pts, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r_ell); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_2calcLocalSpread(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_nns); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_4calcCoM(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_nns, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_com); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_6cython_abs(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_x); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_8ZHEEVR(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_H, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigvals, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_Z, CYTHON_UNUSED int __pyx_v_nrows); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_10respectPBCNoRef(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_xyz, CYTHON_UNUSED float __pyx_v_L_BOX); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_12calcDensProfBruteForceSph(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED float __pyx_v_r_200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_bin_edges, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_prof, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shell); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_14calcMenclsBruteForceSph(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED float __pyx_v_r_200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_Mencl, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ellipsoid); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_16calcDensProfBruteForceEll(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED float __pyx_v_r_200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_prof, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shell); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_18calcMenclsBruteForceEll(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_Mencl, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ellipsoid); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_20calcKTilde(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_r, CYTHON_UNUSED float __pyx_v_r_i, CYTHON_UNUSED float __pyx_v_h_i); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_22__reduce_cython__(struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_24__setstate_cython__(struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_14cython_helpers_12helper_class___pyx_unpickle_CythonHelpers(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +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 */ +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */ +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */ +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +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 PyObject *__pyx_tp_new_14cython_helpers_12helper_class_CythonHelpers(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*/ +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_1; +static PyObject *__pyx_int_184977713; +static PyObject *__pyx_int_222419149; +static PyObject *__pyx_int_neg_1; +static __Pyx_memviewslice __pyx_k_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__4; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__6; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_tuple__8; +static PyObject *__pyx_tuple__9; +static PyObject *__pyx_slice__16; +static PyObject *__pyx_tuple__10; +static PyObject *__pyx_tuple__11; +static PyObject *__pyx_tuple__12; +static PyObject *__pyx_tuple__13; +static PyObject *__pyx_tuple__14; +static PyObject *__pyx_tuple__15; +static PyObject *__pyx_tuple__17; +static PyObject *__pyx_tuple__18; +static PyObject *__pyx_tuple__19; +static PyObject *__pyx_tuple__20; +static PyObject *__pyx_tuple__22; +static PyObject *__pyx_tuple__23; +static PyObject *__pyx_tuple__24; +static PyObject *__pyx_tuple__25; +static PyObject *__pyx_tuple__26; +static PyObject *__pyx_tuple__27; +static PyObject *__pyx_codeobj__21; +static PyObject *__pyx_codeobj__28; +/* Late includes */ + +/* "cython_helpers/helper_class.pyx":11 + * cdef class CythonHelpers: + * + * def calcShapeTensor(float[:,:] nns, int[:] select, complex[::1,:] shape_tensor, float[:] masses, float[:] center, int nb_pts, bint reduced, float[:] r_ell = None): # <<<<<<<<<<<<<< + * """ Calculate shape tensor for point cloud + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_1calcShapeTensor(PyObject *__pyx_v_nns, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_calcShapeTensor[] = "CythonHelpers.calcShapeTensor(nns, int[:] select, double complex[::1, :] shape_tensor, float[:] masses, float[:] center, int nb_pts, bool reduced, float[:] r_ell=None)\n Calculate shape tensor for point cloud\n \n :param nns: positions of cloud particles\n :type nns: (N,3) floats\n :param select: indices of cloud particles to consider\n :type select: (N1,3) ints\n :param shape_tensor: shape tensor array to be filled\n :type shape_tensor: (3,3) complex\n :param masses: masses of cloud particles\n :type masses: (N,) floats\n :param center: COM of point cloud\n :type center: (3,) floats\n :param nb_pts: number of points in `select` to consider\n :type nb_pts: int\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param r_ell: semi-major axis a of the ellipsoid surface on which each particle lies (only if reduced == True)\n :type r_ell: (N,) floats\n :return: shape tensor\n :rtype: (3,3) complex"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_1calcShapeTensor(PyObject *__pyx_v_nns, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_select = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shape_tensor = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED int __pyx_v_nb_pts; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r_ell = { 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("calcShapeTensor (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_select,&__pyx_n_s_shape_tensor,&__pyx_n_s_masses,&__pyx_n_s_center,&__pyx_n_s_nb_pts,&__pyx_n_s_reduced,&__pyx_n_s_r_ell,0}; + PyObject* values[7] = {0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_select)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape_tensor)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcShapeTensor", 0, 6, 7, 1); __PYX_ERR(0, 11, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcShapeTensor", 0, 6, 7, 2); __PYX_ERR(0, 11, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_center)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcShapeTensor", 0, 6, 7, 3); __PYX_ERR(0, 11, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nb_pts)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcShapeTensor", 0, 6, 7, 4); __PYX_ERR(0, 11, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcShapeTensor", 0, 6, 7, 5); __PYX_ERR(0, 11, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r_ell); + if (value) { values[6] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcShapeTensor") < 0)) __PYX_ERR(0, 11, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_select = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_select.memview)) __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_v_shape_tensor = __Pyx_PyObject_to_MemoryviewSlice_dcd____pyx_t_double_complex(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_shape_tensor.memview)) __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_v_center = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_center.memview)) __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_v_nb_pts = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_nb_pts == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11, __pyx_L3_error) + if (values[6]) { + __pyx_v_r_ell = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r_ell.memview)) __PYX_ERR(0, 11, __pyx_L3_error) + } else { + __pyx_v_r_ell = __pyx_k_; + __PYX_INC_MEMVIEW(&__pyx_v_r_ell, 1); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcShapeTensor", 0, 6, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cython_helpers.helper_class.CythonHelpers.calcShapeTensor", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_calcShapeTensor(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_nns), __pyx_v_select, __pyx_v_shape_tensor, __pyx_v_masses, __pyx_v_center, __pyx_v_nb_pts, __pyx_v_reduced, __pyx_v_r_ell); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_calcShapeTensor(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_nns, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_select, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shape_tensor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED int __pyx_v_nb_pts, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r_ell) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcShapeTensor", 0); + + /* "cython_helpers/helper_class.pyx":32 + * :return: shape tensor + * :rtype: (3,3) complex""" + * return # <<<<<<<<<<<<<< + * + * def calcLocalSpread(float[:,:] nns): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "cython_helpers/helper_class.pyx":11 + * cdef class CythonHelpers: + * + * def calcShapeTensor(float[:,:] nns, int[:] select, complex[::1,:] shape_tensor, float[:] masses, float[:] center, int nb_pts, bint reduced, float[:] r_ell = None): # <<<<<<<<<<<<<< + * """ Calculate shape tensor for point cloud + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_select, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_shape_tensor, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_center, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r_ell, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cython_helpers/helper_class.pyx":34 + * return + * + * def calcLocalSpread(float[:,:] nns): # <<<<<<<<<<<<<< + * """ Calculate local spread (2nd moment) around center of volume of point cloud + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_3calcLocalSpread(PyObject *__pyx_v_nns, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_2calcLocalSpread[] = "CythonHelpers.calcLocalSpread(nns)\n Calculate local spread (2nd moment) around center of volume of point cloud\n \n :param nns: positions of cloud particles\n :type nns: (N,3) floats\n :return: local spread\n :rtype: float"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_3calcLocalSpread(PyObject *__pyx_v_nns, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcLocalSpread (wrapper)", 0); + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_2calcLocalSpread(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_nns)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_2calcLocalSpread(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_nns) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcLocalSpread", 0); + + /* "cython_helpers/helper_class.pyx":41 + * :return: local spread + * :rtype: float""" + * return # <<<<<<<<<<<<<< + * + * def calcCoM(float[:,:] nns, float[:] masses, float[:] com): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "cython_helpers/helper_class.pyx":34 + * return + * + * def calcLocalSpread(float[:,:] nns): # <<<<<<<<<<<<<< + * """ Calculate local spread (2nd moment) around center of volume of point cloud + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cython_helpers/helper_class.pyx":43 + * return + * + * def calcCoM(float[:,:] nns, float[:] masses, float[:] com): # <<<<<<<<<<<<<< + * """ Return center of mass (COM) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_5calcCoM(PyObject *__pyx_v_nns, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_4calcCoM[] = "CythonHelpers.calcCoM(nns, float[:] masses, float[:] com)\n Return center of mass (COM)\n \n :param nns: positions of cloud particles\n :type nns: (N,3) floats\n :param masses: masses of cloud particles\n :type masses: (N,) floats\n :param com: COM array to be filled\n :type com: (3,) floats\n :return: COM\n :rtype: (3,) floats"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_5calcCoM(PyObject *__pyx_v_nns, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_com = { 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("calcCoM (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_masses,&__pyx_n_s_com,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_com)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcCoM", 1, 2, 2, 1); __PYX_ERR(0, 43, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcCoM") < 0)) __PYX_ERR(0, 43, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 43, __pyx_L3_error) + __pyx_v_com = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_com.memview)) __PYX_ERR(0, 43, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcCoM", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 43, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cython_helpers.helper_class.CythonHelpers.calcCoM", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_4calcCoM(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_nns), __pyx_v_masses, __pyx_v_com); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_4calcCoM(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_nns, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_com) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcCoM", 0); + + /* "cython_helpers/helper_class.pyx":54 + * :return: COM + * :rtype: (3,) floats""" + * return # <<<<<<<<<<<<<< + * + * def cython_abs(float x): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "cython_helpers/helper_class.pyx":43 + * return + * + * def calcCoM(float[:,:] nns, float[:] masses, float[:] com): # <<<<<<<<<<<<<< + * """ Return center of mass (COM) + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_com, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cython_helpers/helper_class.pyx":56 + * return + * + * def cython_abs(float x): # <<<<<<<<<<<<<< + * """ Absolute value of float + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_7cython_abs(PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_6cython_abs[] = "CythonHelpers.cython_abs(x)\n Absolute value of float\n \n :param x: float value of interest\n :type x: float\n :return: absolute value\n :rtype: float"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_7cython_abs(PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("cython_abs (wrapper)", 0); + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_6cython_abs(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_x)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_6cython_abs(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_x) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("cython_abs", 0); + + /* "cython_helpers/helper_class.pyx":63 + * :return: absolute value + * :rtype: float""" + * return # <<<<<<<<<<<<<< + * + * def ZHEEVR(complex[::1,:] H, double[:] eigvals, complex[::1,:] Z, int nrows): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "cython_helpers/helper_class.pyx":56 + * return + * + * def cython_abs(float x): # <<<<<<<<<<<<<< + * """ Absolute value of float + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cython_helpers/helper_class.pyx":65 + * return + * + * def ZHEEVR(complex[::1,:] H, double[:] eigvals, complex[::1,:] Z, int nrows): # <<<<<<<<<<<<<< + * """ + * Computes the eigenvalues and eigenvectors of a dense Hermitian matrix. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_9ZHEEVR(PyObject *__pyx_v_H, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_8ZHEEVR[] = "CythonHelpers.ZHEEVR(H, double[:] eigvals, double complex[::1, :] Z, int nrows)\n\n Computes the eigenvalues and eigenvectors of a dense Hermitian matrix.\n \n Eigenvectors are returned in Z.\n \n :param H: Hermitian matrix\n :type H: Fortran-ordered 2D double complex memoryview\n :param eigvals: Input array to store eigenvalues\n :type eigvals: double array like\n :param Z: Output array of eigenvectors\n :type Z: Fortran-ordered 2D double complex memoryview\n :param nrows: Number of rows = number of columns in H\n :type nrows: int \n :raises: Exception if not converged\n "; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_9ZHEEVR(PyObject *__pyx_v_H, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigvals = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_Z = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED int __pyx_v_nrows; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ZHEEVR (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_eigvals,&__pyx_n_s_Z,&__pyx_n_s_nrows,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eigvals)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Z)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("ZHEEVR", 1, 3, 3, 1); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nrows)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("ZHEEVR", 1, 3, 3, 2); __PYX_ERR(0, 65, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ZHEEVR") < 0)) __PYX_ERR(0, 65, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v_eigvals = __Pyx_PyObject_to_MemoryviewSlice_ds_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_eigvals.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_Z = __Pyx_PyObject_to_MemoryviewSlice_dcd____pyx_t_double_complex(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Z.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_nrows = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_nrows == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("ZHEEVR", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cython_helpers.helper_class.CythonHelpers.ZHEEVR", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_8ZHEEVR(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_H), __pyx_v_eigvals, __pyx_v_Z, __pyx_v_nrows); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_8ZHEEVR(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_H, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigvals, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_Z, CYTHON_UNUSED int __pyx_v_nrows) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ZHEEVR", 0); + + /* "cython_helpers/helper_class.pyx":81 + * :raises: Exception if not converged + * """ + * return # <<<<<<<<<<<<<< + * + * def respectPBCNoRef(float[:,:] xyz, float L_BOX): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "cython_helpers/helper_class.pyx":65 + * return + * + * def ZHEEVR(complex[::1,:] H, double[:] eigvals, complex[::1,:] Z, int nrows): # <<<<<<<<<<<<<< + * """ + * Computes the eigenvalues and eigenvectors of a dense Hermitian matrix. + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_eigvals, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_Z, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cython_helpers/helper_class.pyx":83 + * return + * + * def respectPBCNoRef(float[:,:] xyz, float L_BOX): # <<<<<<<<<<<<<< + * """ + * Modify xyz inplace so that it respects the box periodicity. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_11respectPBCNoRef(PyObject *__pyx_v_xyz, PyObject *__pyx_arg_L_BOX); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_10respectPBCNoRef[] = "CythonHelpers.respectPBCNoRef(xyz, float L_BOX)\n\n Modify xyz inplace so that it respects the box periodicity.\n \n If point distro xyz has particles separated in any Cartesian direction\n by more than L_BOX/2, reflect those particles along L_BOX/2\n \n :param xyz: coordinates of particles of type 1 or type 4\n :type xyz: (N^3x3) floats\n :param ref: reference particle, which does not matter in the case of\n halo morphology analysis\n :type ref: int\n :return: updated coordinates of particles of type 1 or type 4\n :rtype: (N^3x3) floats"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_11respectPBCNoRef(PyObject *__pyx_v_xyz, PyObject *__pyx_arg_L_BOX) { + CYTHON_UNUSED float __pyx_v_L_BOX; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("respectPBCNoRef (wrapper)", 0); + assert(__pyx_arg_L_BOX); { + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(__pyx_arg_L_BOX); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 83, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + __Pyx_AddTraceback("cython_helpers.helper_class.CythonHelpers.respectPBCNoRef", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_10respectPBCNoRef(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_xyz), ((float)__pyx_v_L_BOX)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_10respectPBCNoRef(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_xyz, CYTHON_UNUSED float __pyx_v_L_BOX) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("respectPBCNoRef", 0); + + /* "cython_helpers/helper_class.pyx":98 + * :rtype: (N^3x3) floats""" + * + * return # <<<<<<<<<<<<<< + * + * def calcDensProfBruteForceSph(float[:,:] xyz, float[:] masses, float[:] center, float r_200, float[:] bin_edges, float[:] dens_prof, int[:] shell): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "cython_helpers/helper_class.pyx":83 + * return + * + * def respectPBCNoRef(float[:,:] xyz, float L_BOX): # <<<<<<<<<<<<<< + * """ + * Modify xyz inplace so that it respects the box periodicity. + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cython_helpers/helper_class.pyx":100 + * return + * + * def calcDensProfBruteForceSph(float[:,:] xyz, float[:] masses, float[:] center, float r_200, float[:] bin_edges, float[:] dens_prof, int[:] shell): # <<<<<<<<<<<<<< + * """ Calculates spherically averaged density profile for one object with coordinates `xyz` and masses `masses` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_13calcDensProfBruteForceSph(PyObject *__pyx_v_xyz, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_12calcDensProfBruteForceSph[] = "CythonHelpers.calcDensProfBruteForceSph(xyz, float[:] masses, float[:] center, float r_200, float[:] bin_edges, float[:] dens_prof, int[:] shell)\n Calculates spherically averaged density profile for one object with coordinates `xyz` and masses `masses`\n \n :param xyz: positions of cloud particles\n :type xyz: (N,3) floats\n :param masses: masses of cloud particles\n :type masses: (N,) floats\n :param center: center of the object\n :type center: (3) floats\n :param r_200: R200 value of the object\n :type r_200: float\n :param bin_edges: radial bin edges at whose centers the density profiles\n should be calculated, normalized by R200\n :type bin_edges: (N2+1,) floats\n :param dens_prof: array to store result in\n :type dens_prof: (N2,) floats\n :param shell: array used for the calculation\n :type shell: (N,) int array\n :return: density profile\n :rtype: float array"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_13calcDensProfBruteForceSph(PyObject *__pyx_v_xyz, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED float __pyx_v_r_200; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_bin_edges = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_prof = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shell = { 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("calcDensProfBruteForceSph (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_masses,&__pyx_n_s_center,&__pyx_n_s_r_200,&__pyx_n_s_bin_edges,&__pyx_n_s_dens_prof,&__pyx_n_s_shell,0}; + PyObject* values[6] = {0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_center)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceSph", 1, 6, 6, 1); __PYX_ERR(0, 100, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r_200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceSph", 1, 6, 6, 2); __PYX_ERR(0, 100, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bin_edges)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceSph", 1, 6, 6, 3); __PYX_ERR(0, 100, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_prof)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceSph", 1, 6, 6, 4); __PYX_ERR(0, 100, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceSph", 1, 6, 6, 5); __PYX_ERR(0, 100, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcDensProfBruteForceSph") < 0)) __PYX_ERR(0, 100, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + } + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 100, __pyx_L3_error) + __pyx_v_center = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_center.memview)) __PYX_ERR(0, 100, __pyx_L3_error) + __pyx_v_r_200 = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_r_200 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L3_error) + __pyx_v_bin_edges = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_bin_edges.memview)) __PYX_ERR(0, 100, __pyx_L3_error) + __pyx_v_dens_prof = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dens_prof.memview)) __PYX_ERR(0, 100, __pyx_L3_error) + __pyx_v_shell = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_shell.memview)) __PYX_ERR(0, 100, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceSph", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 100, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cython_helpers.helper_class.CythonHelpers.calcDensProfBruteForceSph", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_12calcDensProfBruteForceSph(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_xyz), __pyx_v_masses, __pyx_v_center, __pyx_v_r_200, __pyx_v_bin_edges, __pyx_v_dens_prof, __pyx_v_shell); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_12calcDensProfBruteForceSph(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED float __pyx_v_r_200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_bin_edges, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_prof, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shell) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcDensProfBruteForceSph", 0); + + /* "cython_helpers/helper_class.pyx":120 + * :return: density profile + * :rtype: float array""" + * return # <<<<<<<<<<<<<< + * + * def calcMenclsBruteForceSph(float[:,:] xyz, float[:] masses, float[:] center, float r_200, float[:] ROverR200, float[:] Mencl, int[:] ellipsoid): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "cython_helpers/helper_class.pyx":100 + * return + * + * def calcDensProfBruteForceSph(float[:,:] xyz, float[:] masses, float[:] center, float r_200, float[:] bin_edges, float[:] dens_prof, int[:] shell): # <<<<<<<<<<<<<< + * """ Calculates spherically averaged density profile for one object with coordinates `xyz` and masses `masses` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_center, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_bin_edges, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_dens_prof, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_shell, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cython_helpers/helper_class.pyx":122 + * return + * + * def calcMenclsBruteForceSph(float[:,:] xyz, float[:] masses, float[:] center, float r_200, float[:] ROverR200, float[:] Mencl, int[:] ellipsoid): # <<<<<<<<<<<<<< + * """ Calculates spherically averaged enclosed mass profile for one object with coordinates `xyz` and masses `masses` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_15calcMenclsBruteForceSph(PyObject *__pyx_v_xyz, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_14calcMenclsBruteForceSph[] = "CythonHelpers.calcMenclsBruteForceSph(xyz, float[:] masses, float[:] center, float r_200, float[:] ROverR200, float[:] Mencl, int[:] ellipsoid)\n Calculates spherically averaged enclosed mass profile for one object with coordinates `xyz` and masses `masses`\n \n :param xyz: positions of cloud particles\n :type xyz: (N,3) floats\n :param masses: masses of cloud particles\n :type masses: (N,) floats\n :param center: center of the object\n :type center: (3) floats\n :param r_200: R200 value of the object\n :type r_200: float\n :param ROverR200: radii at which the density profiles should be calculated,\n normalized by R200\n :type ROverR200: float array\n :param Mencl: array to store result in\n :type Mencl: float array\n :param ellipsoid: array used for the calculation\n :type ellipsoid: int array\n :return: enclosed mass profile\n :rtype: float array"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_15calcMenclsBruteForceSph(PyObject *__pyx_v_xyz, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED float __pyx_v_r_200; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_Mencl = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ellipsoid = { 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("calcMenclsBruteForceSph (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_masses,&__pyx_n_s_center,&__pyx_n_s_r_200,&__pyx_n_s_ROverR200,&__pyx_n_s_Mencl,&__pyx_n_s_ellipsoid,0}; + PyObject* values[6] = {0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_center)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceSph", 1, 6, 6, 1); __PYX_ERR(0, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r_200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceSph", 1, 6, 6, 2); __PYX_ERR(0, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceSph", 1, 6, 6, 3); __PYX_ERR(0, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Mencl)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceSph", 1, 6, 6, 4); __PYX_ERR(0, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ellipsoid)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceSph", 1, 6, 6, 5); __PYX_ERR(0, 122, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcMenclsBruteForceSph") < 0)) __PYX_ERR(0, 122, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + } + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 122, __pyx_L3_error) + __pyx_v_center = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_center.memview)) __PYX_ERR(0, 122, __pyx_L3_error) + __pyx_v_r_200 = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_r_200 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 122, __pyx_L3_error) + __pyx_v_ROverR200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ROverR200.memview)) __PYX_ERR(0, 122, __pyx_L3_error) + __pyx_v_Mencl = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Mencl.memview)) __PYX_ERR(0, 122, __pyx_L3_error) + __pyx_v_ellipsoid = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ellipsoid.memview)) __PYX_ERR(0, 122, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceSph", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 122, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cython_helpers.helper_class.CythonHelpers.calcMenclsBruteForceSph", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_14calcMenclsBruteForceSph(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_xyz), __pyx_v_masses, __pyx_v_center, __pyx_v_r_200, __pyx_v_ROverR200, __pyx_v_Mencl, __pyx_v_ellipsoid); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_14calcMenclsBruteForceSph(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED float __pyx_v_r_200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_Mencl, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ellipsoid) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMenclsBruteForceSph", 0); + + /* "cython_helpers/helper_class.pyx":142 + * :return: enclosed mass profile + * :rtype: float array""" + * return # <<<<<<<<<<<<<< + * + * def calcDensProfBruteForceEll(float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, float[:] center, float r_200, float[:] a, float[:] b, float[:] c, float[:,:] major, float[:,:] inter, float[:,:] minor, float[:] dens_prof, int[:] shell): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "cython_helpers/helper_class.pyx":122 + * return + * + * def calcMenclsBruteForceSph(float[:,:] xyz, float[:] masses, float[:] center, float r_200, float[:] ROverR200, float[:] Mencl, int[:] ellipsoid): # <<<<<<<<<<<<<< + * """ Calculates spherically averaged enclosed mass profile for one object with coordinates `xyz` and masses `masses` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_center, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_ROverR200, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_Mencl, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_ellipsoid, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cython_helpers/helper_class.pyx":144 + * return + * + * def calcDensProfBruteForceEll(float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, float[:] center, float r_200, float[:] a, float[:] b, float[:] c, float[:,:] major, float[:,:] inter, float[:,:] minor, float[:] dens_prof, int[:] shell): # <<<<<<<<<<<<<< + * """ Calculates ellipsoidal shell-based density profile for one object with coordinates `xyz` and masses `masses` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_17calcDensProfBruteForceEll(PyObject *__pyx_v_xyz, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_16calcDensProfBruteForceEll[] = "CythonHelpers.calcDensProfBruteForceEll(xyz, float[:, :] xyz_princ, float[:] masses, float[:] center, float r_200, float[:] a, float[:] b, float[:] c, float[:, :] major, float[:, :] inter, float[:, :] minor, float[:] dens_prof, int[:] shell)\n Calculates ellipsoidal shell-based density profile for one object with coordinates `xyz` and masses `masses`\n \n :param xyz: positions of cloud particles\n :type xyz: (N,3) floats\n :param xyz_princ: position arrays transformed into principal frame (varies from shell to shell)\n :type xyz_princ: (N,3) floats\n :param masses: masses of cloud particles\n :type masses: (N,) floats\n :param center: center of the object\n :type center: (3) floats\n :param r_200: R200 value of the object\n :type r_200: float\n :param a: major axis eigenvalue interpolated at radial bin edges\n :type a: (N2+1,) floats\n :param b: intermediate axis eigenvalue interpolated at radial bin edges\n :type b: (N2+1,) floats\n :param c: minor axis eigenvalue interpolated at radial bin edges\n :type c: (N2+1,) floats\n :param major: major axis eigenvector interpolated at radial bin centers\n :type major: (N2,3) floats\n :param inter: inter axis eigenvector interpolated at radial bin centers\n :type inter: (N2,3) floats\n :param minor: minor axis eigenvector interpolated at radial bin centers\n :type minor: (N2,3) floats\n :param dens_prof: array to store result in\n :type dens_prof: (N2,) floats\n :param shell: array used for the calculation\n :type shell: (N,) int array\n :return: density profile\n :rtype: float array"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_17calcDensProfBruteForceEll(PyObject *__pyx_v_xyz, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED float __pyx_v_r_200; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_prof = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shell = { 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("calcDensProfBruteForceEll (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz_princ,&__pyx_n_s_masses,&__pyx_n_s_center,&__pyx_n_s_r_200,&__pyx_n_s_a,&__pyx_n_s_b,&__pyx_n_s_c,&__pyx_n_s_major,&__pyx_n_s_inter,&__pyx_n_s_minor,&__pyx_n_s_dens_prof,&__pyx_n_s_shell,0}; + PyObject* values[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz_princ)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, 1); __PYX_ERR(0, 144, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_center)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, 2); __PYX_ERR(0, 144, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r_200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, 3); __PYX_ERR(0, 144, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_a)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, 4); __PYX_ERR(0, 144, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, 5); __PYX_ERR(0, 144, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, 6); __PYX_ERR(0, 144, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_major)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, 7); __PYX_ERR(0, 144, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, 8); __PYX_ERR(0, 144, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minor)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, 9); __PYX_ERR(0, 144, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dens_prof)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, 10); __PYX_ERR(0, 144, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, 11); __PYX_ERR(0, 144, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcDensProfBruteForceEll") < 0)) __PYX_ERR(0, 144, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 12) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + } + __pyx_v_xyz_princ = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz_princ.memview)) __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_v_center = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_center.memview)) __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_v_r_200 = __pyx_PyFloat_AsFloat(values[3]); if (unlikely((__pyx_v_r_200 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_v_a = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_a.memview)) __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_v_b = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_b.memview)) __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_v_c = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_c.memview)) __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_v_major = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_major.memview)) __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_v_inter = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_inter.memview)) __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_v_minor = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_minor.memview)) __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_v_dens_prof = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dens_prof.memview)) __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_v_shell = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_shell.memview)) __PYX_ERR(0, 144, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcDensProfBruteForceEll", 1, 12, 12, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 144, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cython_helpers.helper_class.CythonHelpers.calcDensProfBruteForceEll", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_16calcDensProfBruteForceEll(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_xyz), __pyx_v_xyz_princ, __pyx_v_masses, __pyx_v_center, __pyx_v_r_200, __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_major, __pyx_v_inter, __pyx_v_minor, __pyx_v_dens_prof, __pyx_v_shell); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_16calcDensProfBruteForceEll(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED float __pyx_v_r_200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_dens_prof, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shell) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcDensProfBruteForceEll", 0); + + /* "cython_helpers/helper_class.pyx":175 + * :return: density profile + * :rtype: float array""" + * return # <<<<<<<<<<<<<< + * + * def calcMenclsBruteForceEll(float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, float[:] center, float[:] a, float[:] b, float[:] c, float[:,:] major, float[:,:] inter, float[:,:] minor, float[:] Mencl, int[:] ellipsoid): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "cython_helpers/helper_class.pyx":144 + * return + * + * def calcDensProfBruteForceEll(float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, float[:] center, float r_200, float[:] a, float[:] b, float[:] c, float[:,:] major, float[:,:] inter, float[:,:] minor, float[:] dens_prof, int[:] shell): # <<<<<<<<<<<<<< + * """ Calculates ellipsoidal shell-based density profile for one object with coordinates `xyz` and masses `masses` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz_princ, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_center, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_a, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_b, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_c, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_major, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_inter, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_minor, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_dens_prof, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_shell, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cython_helpers/helper_class.pyx":177 + * return + * + * def calcMenclsBruteForceEll(float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, float[:] center, float[:] a, float[:] b, float[:] c, float[:,:] major, float[:,:] inter, float[:,:] minor, float[:] Mencl, int[:] ellipsoid): # <<<<<<<<<<<<<< + * """ Calculates ellipsoid-based mass profile for one object with coordinates `xyz` and masses `masses` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_19calcMenclsBruteForceEll(PyObject *__pyx_v_xyz, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_18calcMenclsBruteForceEll[] = "CythonHelpers.calcMenclsBruteForceEll(xyz, float[:, :] xyz_princ, float[:] masses, float[:] center, float[:] a, float[:] b, float[:] c, float[:, :] major, float[:, :] inter, float[:, :] minor, float[:] Mencl, int[:] ellipsoid)\n Calculates ellipsoid-based mass profile for one object with coordinates `xyz` and masses `masses`\n \n :param xyz: positions of cloud particles\n :type xyz: (N,3) floats\n :param xyz_princ: position arrays transformed into principal frame (varies from shell to shell)\n :type xyz_princ: (N,3) floats\n :param masses: masses of cloud particles\n :type masses: (N,) floats\n :param center: center of the object\n :type center: (3) floats\n :param a: major axis eigenvalue interpolated at radial bin edges\n :type a: (N2+1,) floats\n :param b: intermediate axis eigenvalue interpolated at radial bin edges\n :type b: (N2+1,) floats\n :param c: minor axis eigenvalue interpolated at radial bin edges\n :type c: (N2+1,) floats\n :param major: major axis eigenvector interpolated at radial bin centers\n :type major: (N2,3) floats\n :param inter: inter axis eigenvector interpolated at radial bin centers\n :type inter: (N2,3) floats\n :param minor: minor axis eigenvector interpolated at radial bin centers\n :type minor: (N2,3) floats\n :param Mencl: array to store result in\n :type Mencl: float array\n :param ellipsoid: array used for the calculation\n :type ellipsoid: int array\n :return: enclosed mass profile\n :rtype: float array"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_19calcMenclsBruteForceEll(PyObject *__pyx_v_xyz, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_Mencl = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ellipsoid = { 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("calcMenclsBruteForceEll (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz_princ,&__pyx_n_s_masses,&__pyx_n_s_center,&__pyx_n_s_a,&__pyx_n_s_b,&__pyx_n_s_c,&__pyx_n_s_major,&__pyx_n_s_inter,&__pyx_n_s_minor,&__pyx_n_s_Mencl,&__pyx_n_s_ellipsoid,0}; + PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz_princ)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceEll", 1, 11, 11, 1); __PYX_ERR(0, 177, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_center)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceEll", 1, 11, 11, 2); __PYX_ERR(0, 177, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_a)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceEll", 1, 11, 11, 3); __PYX_ERR(0, 177, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceEll", 1, 11, 11, 4); __PYX_ERR(0, 177, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceEll", 1, 11, 11, 5); __PYX_ERR(0, 177, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_major)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceEll", 1, 11, 11, 6); __PYX_ERR(0, 177, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceEll", 1, 11, 11, 7); __PYX_ERR(0, 177, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minor)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceEll", 1, 11, 11, 8); __PYX_ERR(0, 177, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Mencl)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceEll", 1, 11, 11, 9); __PYX_ERR(0, 177, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ellipsoid)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceEll", 1, 11, 11, 10); __PYX_ERR(0, 177, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcMenclsBruteForceEll") < 0)) __PYX_ERR(0, 177, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 11) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + } + __pyx_v_xyz_princ = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz_princ.memview)) __PYX_ERR(0, 177, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 177, __pyx_L3_error) + __pyx_v_center = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_center.memview)) __PYX_ERR(0, 177, __pyx_L3_error) + __pyx_v_a = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_a.memview)) __PYX_ERR(0, 177, __pyx_L3_error) + __pyx_v_b = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_b.memview)) __PYX_ERR(0, 177, __pyx_L3_error) + __pyx_v_c = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_c.memview)) __PYX_ERR(0, 177, __pyx_L3_error) + __pyx_v_major = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_major.memview)) __PYX_ERR(0, 177, __pyx_L3_error) + __pyx_v_inter = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_inter.memview)) __PYX_ERR(0, 177, __pyx_L3_error) + __pyx_v_minor = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_minor.memview)) __PYX_ERR(0, 177, __pyx_L3_error) + __pyx_v_Mencl = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Mencl.memview)) __PYX_ERR(0, 177, __pyx_L3_error) + __pyx_v_ellipsoid = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ellipsoid.memview)) __PYX_ERR(0, 177, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcMenclsBruteForceEll", 1, 11, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 177, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cython_helpers.helper_class.CythonHelpers.calcMenclsBruteForceEll", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_18calcMenclsBruteForceEll(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_xyz), __pyx_v_xyz_princ, __pyx_v_masses, __pyx_v_center, __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_major, __pyx_v_inter, __pyx_v_minor, __pyx_v_Mencl, __pyx_v_ellipsoid); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_18calcMenclsBruteForceEll(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_Mencl, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ellipsoid) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMenclsBruteForceEll", 0); + + /* "cython_helpers/helper_class.pyx":206 + * :return: enclosed mass profile + * :rtype: float array""" + * return # <<<<<<<<<<<<<< + * + * def calcKTilde(float r, float r_i, float h_i): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "cython_helpers/helper_class.pyx":177 + * return + * + * def calcMenclsBruteForceEll(float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, float[:] center, float[:] a, float[:] b, float[:] c, float[:,:] major, float[:,:] inter, float[:,:] minor, float[:] Mencl, int[:] ellipsoid): # <<<<<<<<<<<<<< + * """ Calculates ellipsoid-based mass profile for one object with coordinates `xyz` and masses `masses` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz_princ, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_center, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_a, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_b, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_c, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_major, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_inter, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_minor, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_Mencl, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_ellipsoid, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cython_helpers/helper_class.pyx":208 + * return + * + * def calcKTilde(float r, float r_i, float h_i): # <<<<<<<<<<<<<< + * """ Angle-averaged normalized Gaussian kernel for kernel-based density profile estimation + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_21calcKTilde(PyObject *__pyx_v_r, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_20calcKTilde[] = "CythonHelpers.calcKTilde(r, float r_i, float h_i)\n Angle-averaged normalized Gaussian kernel for kernel-based density profile estimation\n \n :param r: radius in Mpc/h at which to calculate the local, spherically-averaged density\n :type r: float\n :param r_i: radius of point i whose contribution to the local, spherically-averaged density shall be determined\n :type r_i: float\n :param h_i: width of Gaussian kernel for point i\n :type h_i: float\n :return: angle-averaged normalized Gaussian kernel\n :rtype: float"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_21calcKTilde(PyObject *__pyx_v_r, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED float __pyx_v_r_i; + CYTHON_UNUSED float __pyx_v_h_i; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcKTilde (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_r_i,&__pyx_n_s_h_i,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r_i)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_h_i)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcKTilde", 1, 2, 2, 1); __PYX_ERR(0, 208, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcKTilde") < 0)) __PYX_ERR(0, 208, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_r_i = __pyx_PyFloat_AsFloat(values[0]); if (unlikely((__pyx_v_r_i == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 208, __pyx_L3_error) + __pyx_v_h_i = __pyx_PyFloat_AsFloat(values[1]); if (unlikely((__pyx_v_h_i == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 208, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcKTilde", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 208, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cython_helpers.helper_class.CythonHelpers.calcKTilde", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_20calcKTilde(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_r), __pyx_v_r_i, __pyx_v_h_i); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_20calcKTilde(CYTHON_UNUSED struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v_r, CYTHON_UNUSED float __pyx_v_r_i, CYTHON_UNUSED float __pyx_v_h_i) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcKTilde", 0); + + /* "cython_helpers/helper_class.pyx":219 + * :return: angle-averaged normalized Gaussian kernel + * :rtype: float""" + * return # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "cython_helpers/helper_class.pyx":208 + * return + * + * def calcKTilde(float r, float r_i, float h_i): # <<<<<<<<<<<<<< + * """ Angle-averaged normalized Gaussian kernel for kernel-based density profile estimation + * + */ + + /* function exit code */ + __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_14cython_helpers_12helper_class_13CythonHelpers_23__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_22__reduce_cython__[] = "CythonHelpers.__reduce_cython__(self)"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_23__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_22__reduce_cython__(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_22__reduce_cython__(struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__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; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = () # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __Pyx_INCREF(__pyx_empty_tuple); + __pyx_v_state = __pyx_empty_tuple; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = () + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":7 + * state = () + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_2 = (__pyx_v__dict != Py_None); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); + __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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 = False + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = () + * _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 = False # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_CythonHelpers, (type(self), 0xd41d8cd, None), state + */ + /*else*/ { + __pyx_v_use_setstate = 0; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = False + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_CythonHelpers, (type(self), 0xd41d8cd, None), state + * else: + */ + __pyx_t_3 = (__pyx_v_use_setstate != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":13 + * use_setstate = False + * if use_setstate: + * return __pyx_unpickle_CythonHelpers, (type(self), 0xd41d8cd, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_CythonHelpers, (type(self), 0xd41d8cd, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_CythonHelpers); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_222419149); + __Pyx_GIVEREF(__pyx_int_222419149); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_222419149); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = False + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_CythonHelpers, (type(self), 0xd41d8cd, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_CythonHelpers, (type(self), 0xd41d8cd, None), state + * else: + * return __pyx_unpickle_CythonHelpers, (type(self), 0xd41d8cd, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_CythonHelpers__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_CythonHelpers); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_222419149); + __Pyx_GIVEREF(__pyx_int_222419149); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_222419149); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __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_5); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __pyx_t_5 = 0; + __pyx_t_1 = 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_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("cython_helpers.helper_class.CythonHelpers.__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_CythonHelpers, (type(self), 0xd41d8cd, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_CythonHelpers__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_25__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static char __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_24__setstate_cython__[] = "CythonHelpers.__setstate_cython__(self, __pyx_state)"; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_25__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_24__setstate_cython__(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class_13CythonHelpers_24__setstate_cython__(struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__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__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_CythonHelpers, (type(self), 0xd41d8cd, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_CythonHelpers__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14cython_helpers_12helper_class___pyx_unpickle_CythonHelpers__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_CythonHelpers, (type(self), 0xd41d8cd, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_CythonHelpers__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("cython_helpers.helper_class.CythonHelpers.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_CythonHelpers(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14cython_helpers_12helper_class_1__pyx_unpickle_CythonHelpers(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_14cython_helpers_12helper_class_1__pyx_unpickle_CythonHelpers = {"__pyx_unpickle_CythonHelpers", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14cython_helpers_12helper_class_1__pyx_unpickle_CythonHelpers, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14cython_helpers_12helper_class_1__pyx_unpickle_CythonHelpers(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_CythonHelpers (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_CythonHelpers", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_CythonHelpers", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_CythonHelpers") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__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_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_CythonHelpers", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("cython_helpers.helper_class.__pyx_unpickle_CythonHelpers", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14cython_helpers_12helper_class___pyx_unpickle_CythonHelpers(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14cython_helpers_12helper_class___pyx_unpickle_CythonHelpers(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 + int __pyx_t_1; + 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("__pyx_unpickle_CythonHelpers", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xd41d8cd: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xd41d8cd) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0xd41d8cd: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum) + * __pyx_result = CythonHelpers.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0xd41d8cd: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = CythonHelpers.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xd4, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xd41d8cd: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum) + * __pyx_result = CythonHelpers.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_CythonHelpers__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14cython_helpers_12helper_class_CythonHelpers), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum) + * __pyx_result = CythonHelpers.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_CythonHelpers__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = CythonHelpers.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_CythonHelpers__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_CythonHelpers__set_state(CythonHelpers __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_f_14cython_helpers_12helper_class___pyx_unpickle_CythonHelpers__set_state(((struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum) + * __pyx_result = CythonHelpers.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_CythonHelpers__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_CythonHelpers__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_CythonHelpers__set_state(CythonHelpers __pyx_result, tuple __pyx_state): + * if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'): + */ + __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_CythonHelpers(__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_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("cython_helpers.helper_class.__pyx_unpickle_CythonHelpers", __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_CythonHelpers__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_CythonHelpers__set_state(CythonHelpers __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[0]) + */ + +static PyObject *__pyx_f_14cython_helpers_12helper_class___pyx_unpickle_CythonHelpers__set_state(struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + Py_ssize_t __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_CythonHelpers__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_CythonHelpers__set_state(CythonHelpers __pyx_result, tuple __pyx_state): + * if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[0]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_2 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 12, __pyx_L1_error) + __pyx_t_3 = ((__pyx_t_2 > 0) != 0); + if (__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 12, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 != 0); + __pyx_t_1 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_CythonHelpers__set_state(CythonHelpers __pyx_result, tuple __pyx_state): + * if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[0]) # <<<<<<<<<<<<<< + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __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, 13, __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, 13, __pyx_L1_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_CythonHelpers__set_state(CythonHelpers __pyx_result, tuple __pyx_state): + * if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[0]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_CythonHelpers__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_CythonHelpers__set_state(CythonHelpers __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[0]) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("cython_helpers.helper_class.__pyx_unpickle_CythonHelpers__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + +/* Python wrapper */ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_shape = 0; + Py_ssize_t __pyx_v_itemsize; + PyObject *__pyx_v_format = 0; + PyObject *__pyx_v_mode = 0; + int __pyx_v_allocate_buffer; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[3] = ((PyObject *)__pyx_n_s_c); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(1, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(1, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 122, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_shape = ((PyObject*)values[0]); + __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 122, __pyx_L3_error) + __pyx_v_format = values[2]; + __pyx_v_mode = values[3]; + if (values[4]) { + __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 123, __pyx_L3_error) + } else { + + /* "View.MemoryView":123 + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, + * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< + * + * cdef int idx + */ + __pyx_v_allocate_buffer = ((int)1); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 122, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(1, 122, __pyx_L1_error) + if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { + PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(1, 122, __pyx_L1_error) + } + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + int __pyx_v_idx; + Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_dim; + PyObject **__pyx_v_p; + char __pyx_v_order; + int __pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + char *__pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + Py_ssize_t __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + __Pyx_INCREF(__pyx_v_format); + + /* "View.MemoryView":129 + * cdef PyObject **p + * + * self.ndim = len(shape) # <<<<<<<<<<<<<< + * self.itemsize = itemsize + * + */ + if (unlikely(__pyx_v_shape == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 129, __pyx_L1_error) + } + __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(1, 129, __pyx_L1_error) + __pyx_v_self->ndim = ((int)__pyx_t_1); + + /* "View.MemoryView":130 + * + * self.ndim = len(shape) + * self.itemsize = itemsize # <<<<<<<<<<<<<< + * + * if not self.ndim: + */ + __pyx_v_self->itemsize = __pyx_v_itemsize; + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 133, __pyx_L1_error) + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + } + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 136, __pyx_L1_error) + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + } + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + __pyx_t_2 = PyBytes_Check(__pyx_v_format); + __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":139 + * + * if not isinstance(format, bytes): + * format = format.encode('ASCII') # <<<<<<<<<<<<<< + * self._format = format # keep a reference to the byte string + * self.format = self._format + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + if (CYTHON_UNPACK_METHODS && likely(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_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + } + + /* "View.MemoryView":140 + * if not isinstance(format, bytes): + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< + * self.format = self._format + * + */ + if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(1, 140, __pyx_L1_error) + __pyx_t_3 = __pyx_v_format; + __Pyx_INCREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_v_self->_format); + __Pyx_DECREF(__pyx_v_self->_format); + __pyx_v_self->_format = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":141 + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + * self.format = self._format # <<<<<<<<<<<<<< + * + * + */ + if (unlikely(__pyx_v_self->_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); + __PYX_ERR(1, 141, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(1, 141, __pyx_L1_error) + __pyx_v_self->format = __pyx_t_7; + + /* "View.MemoryView":144 + * + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< + * self._strides = self._shape + self.ndim + * + */ + __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); + + /* "View.MemoryView":145 + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) + * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< + * + * if not self._shape: + */ + __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 148, __pyx_L1_error) + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + } + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + __pyx_t_8 = 0; + __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; + for (;;) { + if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(1, 151, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 151, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_9; + __pyx_v_idx = __pyx_t_8; + __pyx_t_8 = (__pyx_t_8 + 1); + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + __pyx_t_4 = ((__pyx_v_dim <= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":153 + * for idx, dim in enumerate(shape): + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) # <<<<<<<<<<<<<< + * self._shape[idx] = dim + * + */ + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6); + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 153, __pyx_L1_error) + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + } + + /* "View.MemoryView":154 + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim # <<<<<<<<<<<<<< + * + * cdef char order + */ + (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 157, __pyx_L1_error) + if (__pyx_t_4) { + + /* "View.MemoryView":158 + * cdef char order + * if mode == 'fortran': + * order = b'F' # <<<<<<<<<<<<<< + * self.mode = u'fortran' + * elif mode == 'c': + */ + __pyx_v_order = 'F'; + + /* "View.MemoryView":159 + * if mode == 'fortran': + * order = b'F' + * self.mode = u'fortran' # <<<<<<<<<<<<<< + * elif mode == 'c': + * order = b'C' + */ + __Pyx_INCREF(__pyx_n_u_fortran); + __Pyx_GIVEREF(__pyx_n_u_fortran); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_fortran; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 160, __pyx_L1_error) + if (likely(__pyx_t_4)) { + + /* "View.MemoryView":161 + * self.mode = u'fortran' + * elif mode == 'c': + * order = b'C' # <<<<<<<<<<<<<< + * self.mode = u'c' + * else: + */ + __pyx_v_order = 'C'; + + /* "View.MemoryView":162 + * elif mode == 'c': + * order = b'C' + * self.mode = u'c' # <<<<<<<<<<<<<< + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + */ + __Pyx_INCREF(__pyx_n_u_c); + __Pyx_GIVEREF(__pyx_n_u_c); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_c; + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":164 + * self.mode = u'c' + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) # <<<<<<<<<<<<<< + * + * self.len = fill_contig_strides_array(self._shape, self._strides, + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 164, __pyx_L1_error) + } + __pyx_L10:; + + /* "View.MemoryView":166 + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + * + * self.len = fill_contig_strides_array(self._shape, self._strides, # <<<<<<<<<<<<<< + * itemsize, self.ndim, order) + * + */ + __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); + + /* "View.MemoryView":169 + * itemsize, self.ndim, order) + * + * self.free_data = allocate_buffer # <<<<<<<<<<<<<< + * self.dtype_is_object = format == b'O' + * if allocate_buffer: + */ + __pyx_v_self->free_data = __pyx_v_allocate_buffer; + + /* "View.MemoryView":170 + * + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< + * if allocate_buffer: + * + */ + __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 170, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 170, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_v_self->dtype_is_object = __pyx_t_4; + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_4 = (__pyx_v_allocate_buffer != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":174 + * + * + * self.data = malloc(self.len) # <<<<<<<<<<<<<< + * if not self.data: + * raise MemoryError("unable to allocate array data.") + */ + __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 176, __pyx_L1_error) + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":179 + * + * if self.dtype_is_object: + * p = self.data # <<<<<<<<<<<<<< + * for i in range(self.len / itemsize): + * p[i] = Py_None + */ + __pyx_v_p = ((PyObject **)__pyx_v_self->data); + + /* "View.MemoryView":180 + * if self.dtype_is_object: + * p = self.data + * for i in range(self.len / itemsize): # <<<<<<<<<<<<<< + * p[i] = Py_None + * Py_INCREF(Py_None) + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 180, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 180, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize); + __pyx_t_9 = __pyx_t_1; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "View.MemoryView":181 + * p = self.data + * for i in range(self.len / itemsize): + * p[i] = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + (__pyx_v_p[__pyx_v_i]) = Py_None; + + /* "View.MemoryView":182 + * for i in range(self.len / itemsize): + * p[i] = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + Py_INCREF(Py_None); + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + } + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_format); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __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)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + int __pyx_v_bufmode; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + char *__pyx_t_4; + Py_ssize_t __pyx_t_5; + int __pyx_t_6; + Py_ssize_t *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":186 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 # <<<<<<<<<<<<<< + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = -1; + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 187, __pyx_L1_error) + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":188 + * cdef int bufmode = -1 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + goto __pyx_L3; + } + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 189, __pyx_L1_error) + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":190 + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + */ + __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + } + __pyx_L3:; + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 192, __pyx_L1_error) + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + } + + /* "View.MemoryView":193 + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data # <<<<<<<<<<<<<< + * info.len = self.len + * info.ndim = self.ndim + */ + __pyx_t_4 = __pyx_v_self->data; + __pyx_v_info->buf = __pyx_t_4; + + /* "View.MemoryView":194 + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + * info.len = self.len # <<<<<<<<<<<<<< + * info.ndim = self.ndim + * info.shape = self._shape + */ + __pyx_t_5 = __pyx_v_self->len; + __pyx_v_info->len = __pyx_t_5; + + /* "View.MemoryView":195 + * info.buf = self.data + * info.len = self.len + * info.ndim = self.ndim # <<<<<<<<<<<<<< + * info.shape = self._shape + * info.strides = self._strides + */ + __pyx_t_6 = __pyx_v_self->ndim; + __pyx_v_info->ndim = __pyx_t_6; + + /* "View.MemoryView":196 + * info.len = self.len + * info.ndim = self.ndim + * info.shape = self._shape # <<<<<<<<<<<<<< + * info.strides = self._strides + * info.suboffsets = NULL + */ + __pyx_t_7 = __pyx_v_self->_shape; + __pyx_v_info->shape = __pyx_t_7; + + /* "View.MemoryView":197 + * info.ndim = self.ndim + * info.shape = self._shape + * info.strides = self._strides # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = self.itemsize + */ + __pyx_t_7 = __pyx_v_self->_strides; + __pyx_v_info->strides = __pyx_t_7; + + /* "View.MemoryView":198 + * info.shape = self._shape + * info.strides = self._strides + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = self.itemsize + * info.readonly = 0 + */ + __pyx_v_info->suboffsets = NULL; + + /* "View.MemoryView":199 + * info.strides = self._strides + * info.suboffsets = NULL + * info.itemsize = self.itemsize # <<<<<<<<<<<<<< + * info.readonly = 0 + * + */ + __pyx_t_5 = __pyx_v_self->itemsize; + __pyx_v_info->itemsize = __pyx_t_5; + + /* "View.MemoryView":200 + * info.suboffsets = NULL + * info.itemsize = self.itemsize + * info.readonly = 0 # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + __pyx_v_info->readonly = 0; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":203 + * + * if flags & PyBUF_FORMAT: + * info.format = self.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_4 = __pyx_v_self->format; + __pyx_v_info->format = __pyx_t_4; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":205 + * info.format = self.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.obj = self + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L5:; + + /* "View.MemoryView":207 + * info.format = NULL + * + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + +/* Python wrapper */ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":213 + * def __dealloc__(array self): + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) # <<<<<<<<<<<<<< + * elif self.free_data: + * if self.dtype_is_object: + */ + __pyx_v_self->callback_free_data(__pyx_v_self->data); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + __pyx_t_1 = (__pyx_v_self->free_data != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":216 + * elif self.free_data: + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, # <<<<<<<<<<<<<< + * self._strides, self.ndim, False) + * free(self.data) + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + } + + /* "View.MemoryView":218 + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + * free(self.data) # <<<<<<<<<<<<<< + * PyObject_Free(self._shape) + * + */ + free(__pyx_v_self->data); + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + } + __pyx_L3:; + + /* "View.MemoryView":219 + * self._strides, self.ndim, False) + * free(self.data) + * PyObject_Free(self._shape) # <<<<<<<<<<<<<< + * + * @property + */ + PyObject_Free(__pyx_v_self->_shape); + + /* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__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("__get__", 0); + + /* "View.MemoryView":223 + * @property + * def memview(self): + * return self.get_memview() # <<<<<<<<<<<<<< + * + * @cname('get_memview') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) { + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_memview", 0); + + /* "View.MemoryView":227 + * @cname('get_memview') + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< + * return memoryview(self, flags, self.dtype_is_object) + * + */ + __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); + + /* "View.MemoryView":228 + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":231 + * + * def __len__(self): + * return self._shape[0] # <<<<<<<<<<<<<< + * + * def __getattr__(self, attr): + */ + __pyx_r = (__pyx_v_self->_shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getattr__", 0); + + /* "View.MemoryView":234 + * + * def __getattr__(self, attr): + * return getattr(self.memview, attr) # <<<<<<<<<<<<<< + * + * def __getitem__(self, item): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":237 + * + * def __getitem__(self, item): + * return self.memview[item] # <<<<<<<<<<<<<< + * + * def __setitem__(self, item, value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + +/* Python wrapper */ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + + /* "View.MemoryView":240 + * + * def __setitem__(self, item, value): + * self.memview[item] = value # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(1, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + +static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) { + struct __pyx_array_obj *__pyx_v_result = 0; + struct __pyx_array_obj *__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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("array_cwrapper", 0); + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":249 + * + * if buf == NULL: + * result = array(shape, itemsize, format, mode.decode('ASCII')) # <<<<<<<<<<<<<< + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4); + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + /*else*/ { + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":252 + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) # <<<<<<<<<<<<<< + * result.data = buf + * + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(1, 252, __pyx_L1_error) + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __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_v_result = ((struct __pyx_array_obj *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "View.MemoryView":253 + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) + * result.data = buf # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->data = __pyx_v_buf; + } + __pyx_L3:; + + /* "View.MemoryView":255 + * result.data = buf + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + + /* 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("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + +/* Python wrapper */ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_name = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0}; + PyObject* values[1] = {0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(1, 281, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + } + __pyx_v_name = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 281, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 0); + + /* "View.MemoryView":282 + * cdef object name + * def __init__(self, name): + * self.name = name # <<<<<<<<<<<<<< + * def __repr__(self): + * return self.name + */ + __Pyx_INCREF(__pyx_v_name); + __Pyx_GIVEREF(__pyx_v_name); + __Pyx_GOTREF(__pyx_v_self->name); + __Pyx_DECREF(__pyx_v_self->name); + __pyx_v_self->name = __pyx_v_name; + + /* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + +/* Python wrapper */ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":284 + * self.name = name + * def __repr__(self): + * return self.name # <<<<<<<<<<<<<< + * + * cdef generic = Enum("") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->name); + __pyx_r = __pyx_v_self->name; + goto __pyx_L0; + + /* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + + /* function exit code */ + __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___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__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; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.name,) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_self->name); + __Pyx_GIVEREF(__pyx_v_self->name); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); + __pyx_v_state = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":7 + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_2 = (__pyx_v__dict != Py_None); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); + __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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.name is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.name,) + * _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.name is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_self->name != Py_None); + __pyx_v_use_setstate = __pyx_t_3; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + __pyx_t_3 = (__pyx_v_use_setstate != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":13 + * use_setstate = self.name is not None + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __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_5); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __pyx_t_5 = 0; + __pyx_t_1 = 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_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.Enum.__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_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__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__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_unpickle_Enum__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_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__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("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + +static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) { + Py_intptr_t __pyx_v_aligned_p; + size_t __pyx_v_offset; + void *__pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":300 + * cdef void *align_pointer(void *memory, size_t alignment) nogil: + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory # <<<<<<<<<<<<<< + * cdef size_t offset + * + */ + __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory); + + /* "View.MemoryView":304 + * + * with cython.cdivision(True): + * offset = aligned_p % alignment # <<<<<<<<<<<<<< + * + * if offset > 0: + */ + __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + __pyx_t_1 = ((__pyx_v_offset > 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":307 + * + * if offset > 0: + * aligned_p += alignment - offset # <<<<<<<<<<<<<< + * + * return aligned_p + */ + __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset)); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + } + + /* "View.MemoryView":309 + * aligned_p += alignment - offset + * + * return aligned_p # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((void *)__pyx_v_aligned_p); + goto __pyx_L0; + + /* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + +/* Python wrapper */ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_obj = 0; + int __pyx_v_flags; + int __pyx_v_dtype_is_object; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(1, 345, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 345, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj = values[0]; + __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error) + if (values[2]) { + __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error) + } else { + __pyx_v_dtype_is_object = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 345, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + + /* "View.MemoryView":346 + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj # <<<<<<<<<<<<<< + * self.flags = flags + * if type(self) is memoryview or obj is not None: + */ + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + __Pyx_GOTREF(__pyx_v_self->obj); + __Pyx_DECREF(__pyx_v_self->obj); + __pyx_v_self->obj = __pyx_v_obj; + + /* "View.MemoryView":347 + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj + * self.flags = flags # <<<<<<<<<<<<<< + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + */ + __pyx_v_self->flags = __pyx_v_flags; + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type)); + __pyx_t_3 = (__pyx_t_2 != 0); + if (!__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_obj != Py_None); + __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { + + /* "View.MemoryView":349 + * self.flags = flags + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + */ + __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 349, __pyx_L1_error) + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":351 + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; + + /* "View.MemoryView":352 + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * global __pyx_memoryview_thread_locks_used + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + } + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + } + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":356 + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + */ + __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + + /* "View.MemoryView":357 + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<< + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1); + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":359 + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< + * if self.lock is NULL: + * raise MemoryError + */ + __pyx_v_self->lock = PyThread_allocate_lock(); + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":361 + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + PyErr_NoMemory(); __PYX_ERR(1, 361, __pyx_L1_error) + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + } + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":364 + * + * if flags & PyBUF_FORMAT: + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<< + * else: + * self.dtype_is_object = dtype_is_object + */ + __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_self->dtype_is_object = __pyx_t_1; + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + goto __pyx_L10; + } + + /* "View.MemoryView":366 + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + */ + /*else*/ { + __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; + } + __pyx_L10:; + + /* "View.MemoryView":368 + * self.dtype_is_object = dtype_is_object + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( # <<<<<<<<<<<<<< + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL + */ + __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int)))); + + /* "View.MemoryView":370 + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL # <<<<<<<<<<<<<< + * + * def __dealloc__(memoryview self): + */ + __pyx_v_self->typeinfo = NULL; + + /* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + +/* Python wrapper */ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { + int __pyx_v_i; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyThread_type_lock __pyx_t_6; + PyThread_type_lock __pyx_t_7; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + __pyx_t_1 = (__pyx_v_self->obj != Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":374 + * def __dealloc__(memoryview self): + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + */ + __Pyx_ReleaseBuffer((&__pyx_v_self->view)); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + __pyx_t_2 = ((((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":377 + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<< + * Py_DECREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL; + + /* "View.MemoryView":378 + * + * (<__pyx_buffer *> &self.view).obj = NULL + * Py_DECREF(Py_None) # <<<<<<<<<<<<<< + * + * cdef int i + */ + Py_DECREF(Py_None); + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + } + __pyx_L3:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":383 + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<< + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + */ + __pyx_t_3 = __pyx_memoryview_thread_locks_used; + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":385 + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<< + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1); + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":388 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<< + * break + * else: + */ + __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]); + + /* "View.MemoryView":387 + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break + */ + (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6; + (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7; + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + } + + /* "View.MemoryView":389 + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break # <<<<<<<<<<<<<< + * else: + * PyThread_free_lock(self.lock) + */ + goto __pyx_L6_break; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + } + } + /*else*/ { + + /* "View.MemoryView":391 + * break + * else: + * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + */ + PyThread_free_lock(__pyx_v_self->lock); + } + __pyx_L6_break:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + } + + /* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + Py_ssize_t __pyx_v_dim; + char *__pyx_v_itemp; + PyObject *__pyx_v_idx = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + PyObject *(*__pyx_t_4)(PyObject *); + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + char *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_item_pointer", 0); + + /* "View.MemoryView":395 + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< + * + * for dim, idx in enumerate(index): + */ + __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) { + __pyx_t_2 = __pyx_v_index; __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_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 397, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_4)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) 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(1, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) 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(1, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 397, __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(1, 397, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_1; + __pyx_t_1 = (__pyx_t_1 + 1); + + /* "View.MemoryView":398 + * + * for dim, idx in enumerate(index): + * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< + * + * return itemp + */ + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 398, __pyx_L1_error) + __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(1, 398, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_7; + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":400 + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + * return itemp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_itemp; + goto __pyx_L0; + + /* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_indices = NULL; + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + char *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":405 + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: + * return self # <<<<<<<<<<<<<< + * + * have_slices, indices = _unellipsify(index, self.view.ndim) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __pyx_r = ((PyObject *)__pyx_v_self); + goto __pyx_L0; + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + } + + /* "View.MemoryView":407 + * return self + * + * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * cdef char *itemp + */ + __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (likely(__pyx_t_3 != Py_None)) { + PyObject* sequence = __pyx_t_3; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 407, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 407, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_v_indices = __pyx_t_5; + __pyx_t_5 = 0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 410, __pyx_L1_error) + if (__pyx_t_2) { + + /* "View.MemoryView":411 + * cdef char *itemp + * if have_slices: + * return memview_slice(self, indices) # <<<<<<<<<<<<<< + * else: + * itemp = self.get_item_pointer(indices) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + } + + /* "View.MemoryView":413 + * return memview_slice(self, indices) + * else: + * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< + * return self.convert_item_to_object(itemp) + * + */ + /*else*/ { + __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(1, 413, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_6; + + /* "View.MemoryView":414 + * else: + * itemp = self.get_item_pointer(indices) + * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< + * + * def __setitem__(memoryview self, object index, object value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + +/* Python wrapper */ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_obj = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + __Pyx_INCREF(__pyx_v_index); + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + __pyx_t_1 = (__pyx_v_self->view.readonly != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 418, __pyx_L1_error) + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + } + + /* "View.MemoryView":420 + * raise TypeError("Cannot assign to read-only memoryview") + * + * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * if have_slices: + */ + __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (likely(__pyx_t_2 != Py_None)) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 420, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 420, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_3; + __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 422, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":423 + * + * if have_slices: + * obj = self.is_slice(value) # <<<<<<<<<<<<<< + * if obj: + * self.setitem_slice_assignment(self[index], obj) + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_obj = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 424, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":425 + * obj = self.is_slice(value) + * if obj: + * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< + * else: + * self.setitem_slice_assign_scalar(self[index], value) + */ + __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":427 + * self.setitem_slice_assignment(self[index], obj) + * else: + * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< + * else: + * self.setitem_indexed(index, value) + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(1, 427, __pyx_L1_error) + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L5:; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":429 + * self.setitem_slice_assign_scalar(self[index], value) + * else: + * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< + * + * cdef is_slice(self, obj): + */ + /*else*/ { + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L4:; + + /* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_slice", 0); + __Pyx_INCREF(__pyx_v_obj); + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + /*try:*/ { + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":435 + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) # <<<<<<<<<<<<<< + * except TypeError: + * return None + */ + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 435, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __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; + + /* "View.MemoryView":436 + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + * except TypeError: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); + if (__pyx_t_9) { + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(1, 436, __pyx_L6_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":437 + * self.dtype_is_object) + * except TypeError: + * return None # <<<<<<<<<<<<<< + * + * return obj + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_except_return; + } + goto __pyx_L6_except_error; + __pyx_L6_except_error:; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L1_error; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L0; + __pyx_L9_try_end:; + } + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + } + + /* "View.MemoryView":439 + * return None + * + * return obj # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assignment(self, dst, src): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_obj); + __pyx_r = __pyx_v_obj; + goto __pyx_L0; + + /* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { + __Pyx_memviewslice __pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_src_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + __Pyx_memviewslice *__pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 445, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 445, __pyx_L1_error) + + /* "View.MemoryView":446 + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], # <<<<<<<<<<<<<< + * src.ndim, dst.ndim, self.dtype_is_object) + * + */ + if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 446, __pyx_L1_error) + __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 446, __pyx_L1_error) + + /* "View.MemoryView":447 + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error) + + /* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { + int __pyx_v_array[0x80]; + void *__pyx_v_tmp; + void *__pyx_v_item; + __Pyx_memviewslice *__pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_tmp_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + char const *__pyx_t_6; + PyObject *__pyx_t_7 = NULL; + 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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); + + /* "View.MemoryView":451 + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + * cdef int array[128] + * cdef void *tmp = NULL # <<<<<<<<<<<<<< + * cdef void *item + * + */ + __pyx_v_tmp = NULL; + + /* "View.MemoryView":456 + * cdef __Pyx_memviewslice *dst_slice + * cdef __Pyx_memviewslice tmp_slice + * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< + * + * if self.view.itemsize > sizeof(array): + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 456, __pyx_L1_error) + __pyx_v_dst_slice = __pyx_t_1; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":459 + * + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< + * if tmp == NULL: + * raise MemoryError + */ + __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":461 + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * item = tmp + * else: + */ + PyErr_NoMemory(); __PYX_ERR(1, 461, __pyx_L1_error) + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + } + + /* "View.MemoryView":462 + * if tmp == NULL: + * raise MemoryError + * item = tmp # <<<<<<<<<<<<<< + * else: + * item = array + */ + __pyx_v_item = __pyx_v_tmp; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":464 + * item = tmp + * else: + * item = array # <<<<<<<<<<<<<< + * + * try: + */ + /*else*/ { + __pyx_v_item = ((void *)__pyx_v_array); + } + __pyx_L3:; + + /* "View.MemoryView":466 + * item = array + * + * try: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * ( item)[0] = value + */ + /*try:*/ { + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":468 + * try: + * if self.dtype_is_object: + * ( item)[0] = value # <<<<<<<<<<<<<< + * else: + * self.assign_item_from_object( item, value) + */ + (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":470 + * ( item)[0] = value + * else: + * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 470, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L8:; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":475 + * + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + * item, self.dtype_is_object) + */ + __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 475, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + } + + /* "View.MemoryView":476 + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< + * item, self.dtype_is_object) + * finally: + */ + __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); + } + + /* "View.MemoryView":479 + * item, self.dtype_is_object) + * finally: + * PyMem_Free(tmp) # <<<<<<<<<<<<<< + * + * cdef setitem_indexed(self, index, value): + */ + /*finally:*/ { + /*normal exit:*/{ + PyMem_Free(__pyx_v_tmp); + goto __pyx_L7; + } + __pyx_L6_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __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_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename; + { + PyMem_Free(__pyx_v_tmp); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + } + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6; + goto __pyx_L1_error; + } + __pyx_L7:; + } + + /* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_indexed", 0); + + /* "View.MemoryView":482 + * + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< + * self.assign_item_from_object(itemp, value) + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(1, 482, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_1; + + /* "View.MemoryView":483 + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_v_struct = NULL; + PyObject *__pyx_v_bytesitem = 0; + PyObject *__pyx_v_result = NULL; + 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; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + size_t __pyx_t_10; + int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":488 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef bytes bytesitem + * + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":491 + * cdef bytes bytesitem + * + * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< + * try: + * result = struct.unpack(self.view.format, bytesitem) + */ + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "View.MemoryView":493 + * bytesitem = itemp[:self.view.itemsize] + * try: + * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< + * except struct.error: + * raise ValueError("Unable to convert item to object") + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && 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; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + { + __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + if (__pyx_t_7) { + __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; + } + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6); + __Pyx_INCREF(__pyx_v_bytesitem); + __Pyx_GIVEREF(__pyx_v_bytesitem); + PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem); + __pyx_t_6 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + } + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + /*else:*/ { + __pyx_t_10 = strlen(__pyx_v_self->view.format); + __pyx_t_11 = ((__pyx_t_10 == 1) != 0); + if (__pyx_t_11) { + + /* "View.MemoryView":498 + * else: + * if len(self.view.format) == 1: + * return result[0] # <<<<<<<<<<<<<< + * return result + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 498, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6_except_return; + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + } + + /* "View.MemoryView":499 + * if len(self.view.format) == 1: + * return result[0] + * return result # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "View.MemoryView":494 + * try: + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: # <<<<<<<<<<<<<< + * raise ValueError("Unable to convert item to object") + * else: + */ + __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9); + __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0; + if (__pyx_t_8) { + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_1); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 495, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(1, 495, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesitem); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_v_struct = NULL; + char __pyx_v_c; + PyObject *__pyx_v_bytesvalue = 0; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + char *__pyx_t_11; + char *__pyx_t_12; + char *__pyx_t_13; + char *__pyx_t_14; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":504 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef char c + * cdef bytes bytesvalue + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + __pyx_t_2 = PyTuple_Check(__pyx_v_value); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "View.MemoryView":510 + * + * if isinstance(value, tuple): + * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< + * else: + * bytesvalue = struct.pack(self.view.format, value) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 510, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":512 + * bytesvalue = struct.pack(self.view.format, *value) + * else: + * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< + * + * for i, c in enumerate(bytesvalue): + */ + /*else*/ { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + { + __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (__pyx_t_5) { + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL; + } + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1); + __Pyx_INCREF(__pyx_v_value); + __Pyx_GIVEREF(__pyx_v_value); + PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value); + __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 512, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = 0; + if (unlikely(__pyx_v_bytesvalue == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); + __PYX_ERR(1, 514, __pyx_L1_error) + } + __Pyx_INCREF(__pyx_v_bytesvalue); + __pyx_t_10 = __pyx_v_bytesvalue; + __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10); + __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10)); + for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) { + __pyx_t_11 = __pyx_t_14; + __pyx_v_c = (__pyx_t_11[0]); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + __pyx_v_i = __pyx_t_9; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = (__pyx_t_9 + 1); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; + } + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* 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_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesvalue); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + char *__pyx_t_5; + void *__pyx_t_6; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->view.readonly != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 520, __pyx_L1_error) + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + } + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":523 + * + * if flags & PyBUF_ND: + * info.shape = self.view.shape # <<<<<<<<<<<<<< + * else: + * info.shape = NULL + */ + __pyx_t_4 = __pyx_v_self->view.shape; + __pyx_v_info->shape = __pyx_t_4; + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":525 + * info.shape = self.view.shape + * else: + * info.shape = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_STRIDES: + */ + /*else*/ { + __pyx_v_info->shape = NULL; + } + __pyx_L6:; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":528 + * + * if flags & PyBUF_STRIDES: + * info.strides = self.view.strides # <<<<<<<<<<<<<< + * else: + * info.strides = NULL + */ + __pyx_t_4 = __pyx_v_self->view.strides; + __pyx_v_info->strides = __pyx_t_4; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + goto __pyx_L7; + } + + /* "View.MemoryView":530 + * info.strides = self.view.strides + * else: + * info.strides = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_INDIRECT: + */ + /*else*/ { + __pyx_v_info->strides = NULL; + } + __pyx_L7:; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":533 + * + * if flags & PyBUF_INDIRECT: + * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< + * else: + * info.suboffsets = NULL + */ + __pyx_t_4 = __pyx_v_self->view.suboffsets; + __pyx_v_info->suboffsets = __pyx_t_4; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":535 + * info.suboffsets = self.view.suboffsets + * else: + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + /*else*/ { + __pyx_v_info->suboffsets = NULL; + } + __pyx_L8:; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":538 + * + * if flags & PyBUF_FORMAT: + * info.format = self.view.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_5 = __pyx_v_self->view.format; + __pyx_v_info->format = __pyx_t_5; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":540 + * info.format = self.view.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.buf = self.view.buf + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L9:; + + /* "View.MemoryView":542 + * info.format = NULL + * + * info.buf = self.view.buf # <<<<<<<<<<<<<< + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + */ + __pyx_t_6 = __pyx_v_self->view.buf; + __pyx_v_info->buf = __pyx_t_6; + + /* "View.MemoryView":543 + * + * info.buf = self.view.buf + * info.ndim = self.view.ndim # <<<<<<<<<<<<<< + * info.itemsize = self.view.itemsize + * info.len = self.view.len + */ + __pyx_t_7 = __pyx_v_self->view.ndim; + __pyx_v_info->ndim = __pyx_t_7; + + /* "View.MemoryView":544 + * info.buf = self.view.buf + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< + * info.len = self.view.len + * info.readonly = self.view.readonly + */ + __pyx_t_8 = __pyx_v_self->view.itemsize; + __pyx_v_info->itemsize = __pyx_t_8; + + /* "View.MemoryView":545 + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + * info.len = self.view.len # <<<<<<<<<<<<<< + * info.readonly = self.view.readonly + * info.obj = self + */ + __pyx_t_8 = __pyx_v_self->view.len; + __pyx_v_info->len = __pyx_t_8; + + /* "View.MemoryView":546 + * info.itemsize = self.view.itemsize + * info.len = self.view.len + * info.readonly = self.view.readonly # <<<<<<<<<<<<<< + * info.obj = self + * + */ + __pyx_t_1 = __pyx_v_self->view.readonly; + __pyx_v_info->readonly = __pyx_t_1; + + /* "View.MemoryView":547 + * info.len = self.view.len + * info.readonly = self.view.readonly + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":554 + * @property + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< + * transpose_memslice(&result.from_slice) + * return result + */ + __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(1, 554, __pyx_L1_error) + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":555 + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 555, __pyx_L1_error) + + /* "View.MemoryView":556 + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + * return result # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":560 + * @property + * def base(self): + * return self.obj # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->obj); + __pyx_r = __pyx_v_self->obj; + goto __pyx_L0; + + /* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_length; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":564 + * @property + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_length = (__pyx_t_2[0]); + __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_stride; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 570, __pyx_L1_error) + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + } + + /* "View.MemoryView":572 + * raise ValueError("Buffer view does not expose strides") + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_v_stride = (__pyx_t_3[0]); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + Py_ssize_t *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__13, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + } + + /* "View.MemoryView":579 + * return (-1,) * self.view.ndim + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim); + for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) { + __pyx_t_4 = __pyx_t_6; + __pyx_v_suboffset = (__pyx_t_4[0]); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__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("__get__", 0); + + /* "View.MemoryView":583 + * @property + * def ndim(self): + * return self.view.ndim # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 583, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__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("__get__", 0); + + /* "View.MemoryView":587 + * @property + * def itemsize(self): + * return self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 587, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":591 + * @property + * def nbytes(self): + * return self.size * self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + __pyx_t_1 = (__pyx_v_self->_size == Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":596 + * def size(self): + * if self._size is None: + * result = 1 # <<<<<<<<<<<<<< + * + * for length in self.view.shape[:self.view.ndim]: + */ + __Pyx_INCREF(__pyx_int_1); + __pyx_v_result = __pyx_int_1; + + /* "View.MemoryView":598 + * result = 1 + * + * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<< + * result *= length + * + */ + __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 598, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6); + __pyx_t_6 = 0; + + /* "View.MemoryView":599 + * + * for length in self.view.shape[:self.view.ndim]: + * result *= length # <<<<<<<<<<<<<< + * + * self._size = result + */ + __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6); + __pyx_t_6 = 0; + } + + /* "View.MemoryView":601 + * result *= length + * + * self._size = result # <<<<<<<<<<<<<< + * + * return self._size + */ + __Pyx_INCREF(__pyx_v_result); + __Pyx_GIVEREF(__pyx_v_result); + __Pyx_GOTREF(__pyx_v_self->_size); + __Pyx_DECREF(__pyx_v_self->_size); + __pyx_v_self->_size = __pyx_v_result; + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + } + + /* "View.MemoryView":603 + * self._size = result + * + * return self._size # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->_size); + __pyx_r = __pyx_v_self->_size; + goto __pyx_L0; + + /* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":607 + * def __len__(self): + * if self.view.ndim >= 1: + * return self.view.shape[0] # <<<<<<<<<<<<<< + * + * return 0 + */ + __pyx_r = (__pyx_v_self->view.shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + } + + /* "View.MemoryView":609 + * return self.view.shape[0] + * + * return 0 # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":613 + * def __repr__(self): + * return "" % (self.base.__class__.__name__, + * id(self)) # <<<<<<<<<<<<<< + * + * def __str__(self): + */ + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 613, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__str__", 0); + + /* "View.MemoryView":616 + * + * def __str__(self): + * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __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; + + /* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_c_contig", 0); + + /* "View.MemoryView":622 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 622, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":623 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<< + * + * def is_f_contig(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_f_contig", 0); + + /* "View.MemoryView":628 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 628, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":629 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<< + * + * def copy(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_mslice; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy", 0); + + /* "View.MemoryView":633 + * def copy(self): + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &mslice) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); + + /* "View.MemoryView":635 + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + * + * slice_copy(self, &mslice) # <<<<<<<<<<<<<< + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); + + /* "View.MemoryView":636 + * + * slice_copy(self, &mslice) + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_C_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 636, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":641 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< + * + * def copy_fortran(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy_fortran", 0); + + /* "View.MemoryView":645 + * def copy_fortran(self): + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &src) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); + + /* "View.MemoryView":647 + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + * + * slice_copy(self, &src) # <<<<<<<<<<<<<< + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); + + /* "View.MemoryView":648 + * + * slice_copy(self, &src) + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_F_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 648, __pyx_L1_error) + __pyx_v_dst = __pyx_t_1; + + /* "View.MemoryView":653 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 653, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __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): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + +static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { + struct __pyx_memoryview_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); + + /* "View.MemoryView":658 + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< + * result.typeinfo = typeinfo + * return result + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_o); + __Pyx_GIVEREF(__pyx_v_o); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":659 + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_v_result->typeinfo = __pyx_v_typeinfo; + + /* "View.MemoryView":660 + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_check') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("memoryview_check", 0); + + /* "View.MemoryView":664 + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): + * return isinstance(o, memoryview) # <<<<<<<<<<<<<< + * + * cdef tuple _unellipsify(object index, int ndim): + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); + __pyx_r = __pyx_t_1; + goto __pyx_L0; + + /* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + +static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { + PyObject *__pyx_v_tup = NULL; + PyObject *__pyx_v_result = NULL; + int __pyx_v_have_slices; + int __pyx_v_seen_ellipsis; + CYTHON_UNUSED PyObject *__pyx_v_idx = NULL; + PyObject *__pyx_v_item = NULL; + Py_ssize_t __pyx_v_nslices; + 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)(PyObject *); + PyObject *__pyx_t_7 = NULL; + Py_ssize_t __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_unellipsify", 0); + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + __pyx_t_1 = PyTuple_Check(__pyx_v_index); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":672 + * """ + * if not isinstance(index, tuple): + * tup = (index,) # <<<<<<<<<<<<<< + * else: + * tup = index + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 672, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_index); + __Pyx_GIVEREF(__pyx_v_index); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); + __pyx_v_tup = __pyx_t_3; + __pyx_t_3 = 0; + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":674 + * tup = (index,) + * else: + * tup = index # <<<<<<<<<<<<<< + * + * result = [] + */ + /*else*/ { + __Pyx_INCREF(__pyx_v_index); + __pyx_v_tup = __pyx_v_index; + } + __pyx_L3:; + + /* "View.MemoryView":676 + * tup = index + * + * result = [] # <<<<<<<<<<<<<< + * have_slices = False + * seen_ellipsis = False + */ + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 676, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_result = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":677 + * + * result = [] + * have_slices = False # <<<<<<<<<<<<<< + * seen_ellipsis = False + * for idx, item in enumerate(tup): + */ + __pyx_v_have_slices = 0; + + /* "View.MemoryView":678 + * result = [] + * have_slices = False + * seen_ellipsis = False # <<<<<<<<<<<<<< + * for idx, item in enumerate(tup): + * if item is Ellipsis: + */ + __pyx_v_seen_ellipsis = 0; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + __Pyx_INCREF(__pyx_int_0); + __pyx_t_3 = __pyx_int_0; + if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) { + __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 679, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_4))) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } else { + if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } + } else { + __pyx_t_7 = __pyx_t_6(__pyx_t_4); + if (unlikely(!__pyx_t_7)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 679, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_7); + } + __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_INCREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3); + __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_7; + __pyx_t_7 = 0; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(1, 682, __pyx_L1_error) + __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__16); + __Pyx_GIVEREF(__pyx_slice__16); + PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__16); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":683 + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True # <<<<<<<<<<<<<< + * else: + * result.append(slice(None)) + */ + __pyx_v_seen_ellipsis = 1; + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + goto __pyx_L7; + } + + /* "View.MemoryView":685 + * seen_ellipsis = True + * else: + * result.append(slice(None)) # <<<<<<<<<<<<<< + * have_slices = True + * else: + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__16); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 685, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":686 + * else: + * result.append(slice(None)) + * have_slices = True # <<<<<<<<<<<<<< + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + */ + __pyx_v_have_slices = 1; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + goto __pyx_L6; + } + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + /*else*/ { + __pyx_t_2 = PySlice_Check(__pyx_v_item); + __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0); + __pyx_t_1 = __pyx_t_10; + __pyx_L9_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":689 + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + * raise TypeError("Cannot index with type '%s'" % type(item)) # <<<<<<<<<<<<<< + * + * have_slices = have_slices or isinstance(item, slice) + */ + __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_Raise(__pyx_t_11, 0, 0, 0); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __PYX_ERR(1, 689, __pyx_L1_error) + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + } + + /* "View.MemoryView":691 + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + * have_slices = have_slices or isinstance(item, slice) # <<<<<<<<<<<<<< + * result.append(item) + * + */ + __pyx_t_10 = (__pyx_v_have_slices != 0); + if (!__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = PySlice_Check(__pyx_v_item); + __pyx_t_2 = (__pyx_t_10 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_have_slices = __pyx_t_1; + + /* "View.MemoryView":692 + * + * have_slices = have_slices or isinstance(item, slice) + * result.append(item) # <<<<<<<<<<<<<< + * + * nslices = ndim - len(result) + */ + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 692, __pyx_L1_error) + } + __pyx_L6:; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":694 + * result.append(item) + * + * nslices = ndim - len(result) # <<<<<<<<<<<<<< + * if nslices: + * result.extend([slice(None)] * nslices) + */ + __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 694, __pyx_L1_error) + __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5); + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + __pyx_t_1 = (__pyx_v_nslices != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":696 + * nslices = ndim - len(result) + * if nslices: + * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<< + * + * return have_slices or nslices, tuple(result) + */ + __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__16); + __Pyx_GIVEREF(__pyx_slice__16); + PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__16); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 696, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + } + + /* "View.MemoryView":698 + * result.extend([slice(None)] * nslices) + * + * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + */ + __Pyx_XDECREF(__pyx_r); + if (!__pyx_v_have_slices) { + } else { + __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_L14_bool_binop_done:; + __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_r = ((PyObject*)__pyx_t_11); + __pyx_t_11 = 0; + goto __pyx_L0; + + /* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_tup); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_XDECREF(__pyx_v_item); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + +static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); + + /* "View.MemoryView":701 + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") + */ + __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim); + for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) { + __pyx_t_1 = __pyx_t_3; + __pyx_v_suboffset = (__pyx_t_1[0]); + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __PYX_ERR(1, 703, __pyx_L1_error) + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + } + } + + /* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { + int __pyx_v_new_ndim; + int __pyx_v_suboffset_dim; + int __pyx_v_dim; + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + __Pyx_memviewslice *__pyx_v_p_src; + struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; + __Pyx_memviewslice *__pyx_v_p_dst; + int *__pyx_v_p_suboffset_dim; + Py_ssize_t __pyx_v_start; + Py_ssize_t __pyx_v_stop; + Py_ssize_t __pyx_v_step; + int __pyx_v_have_start; + int __pyx_v_have_stop; + int __pyx_v_have_step; + PyObject *__pyx_v_index = NULL; + struct __pyx_memoryview_obj *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + struct __pyx_memoryview_obj *__pyx_t_4; + char *__pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + PyObject *(*__pyx_t_8)(PyObject *); + PyObject *__pyx_t_9 = NULL; + Py_ssize_t __pyx_t_10; + int __pyx_t_11; + Py_ssize_t __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memview_slice", 0); + + /* "View.MemoryView":711 + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): + * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< + * cdef bint negative_step + * cdef __Pyx_memviewslice src, dst + */ + __pyx_v_new_ndim = 0; + __pyx_v_suboffset_dim = -1; + + /* "View.MemoryView":718 + * + * + * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< + * + * cdef _memoryviewslice memviewsliceobj + */ + (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst)))); + + /* "View.MemoryView":722 + * cdef _memoryviewslice memviewsliceobj + * + * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(!Py_OptimizeFlag)) { + if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) { + PyErr_SetNone(PyExc_AssertionError); + __PYX_ERR(1, 722, __pyx_L1_error) + } + } + #endif + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":725 + * + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview # <<<<<<<<<<<<<< + * p_src = &memviewsliceobj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 725, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":726 + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, &src) + */ + __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + goto __pyx_L3; + } + + /* "View.MemoryView":728 + * p_src = &memviewsliceobj.from_slice + * else: + * slice_copy(memview, &src) # <<<<<<<<<<<<<< + * p_src = &src + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); + + /* "View.MemoryView":729 + * else: + * slice_copy(memview, &src) + * p_src = &src # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_p_src = (&__pyx_v_src); + } + __pyx_L3:; + + /* "View.MemoryView":735 + * + * + * dst.memview = p_src.memview # <<<<<<<<<<<<<< + * dst.data = p_src.data + * + */ + __pyx_t_4 = __pyx_v_p_src->memview; + __pyx_v_dst.memview = __pyx_t_4; + + /* "View.MemoryView":736 + * + * dst.memview = p_src.memview + * dst.data = p_src.data # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_v_p_src->data; + __pyx_v_dst.data = __pyx_t_5; + + /* "View.MemoryView":741 + * + * + * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< + * cdef int *p_suboffset_dim = &suboffset_dim + * cdef Py_ssize_t start, stop, step + */ + __pyx_v_p_dst = (&__pyx_v_dst); + + /* "View.MemoryView":742 + * + * cdef __Pyx_memviewslice *p_dst = &dst + * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< + * cdef Py_ssize_t start, stop, step + * cdef bint have_start, have_stop, have_step + */ + __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + __pyx_t_6 = 0; + if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { + __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + } else { + __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 746, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_8)) { + if (likely(PyList_CheckExact(__pyx_t_3))) { + if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } else { + if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } + } else { + __pyx_t_9 = __pyx_t_8(__pyx_t_3); + if (unlikely(!__pyx_t_9)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 746, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_9); + } + __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9); + __pyx_t_9 = 0; + __pyx_v_dim = __pyx_t_6; + __pyx_t_6 = (__pyx_t_6 + 1); + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":751 + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + * index, 0, 0, # start, stop, step # <<<<<<<<<<<<<< + * 0, 0, 0, # have_{start,stop,step} + * False) + */ + __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 751, __pyx_L1_error) + + /* "View.MemoryView":748 + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 748, __pyx_L1_error) + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + goto __pyx_L6; + } + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + __pyx_t_2 = (__pyx_v_index == Py_None); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":755 + * False) + * elif index is None: + * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + */ + (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; + + /* "View.MemoryView":756 + * elif index is None: + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 + */ + (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; + + /* "View.MemoryView":757 + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< + * new_ndim += 1 + * else: + */ + (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L; + + /* "View.MemoryView":758 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 # <<<<<<<<<<<<<< + * else: + * start = index.start or 0 + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + goto __pyx_L6; + } + + /* "View.MemoryView":760 + * new_ndim += 1 + * else: + * start = index.start or 0 # <<<<<<<<<<<<<< + * stop = index.stop or 0 + * step = index.step or 0 + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 760, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 760, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L7_bool_binop_done:; + __pyx_v_start = __pyx_t_10; + + /* "View.MemoryView":761 + * else: + * start = index.start or 0 + * stop = index.stop or 0 # <<<<<<<<<<<<<< + * step = index.step or 0 + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 761, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 761, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L9_bool_binop_done:; + __pyx_v_stop = __pyx_t_10; + + /* "View.MemoryView":762 + * start = index.start or 0 + * stop = index.stop or 0 + * step = index.step or 0 # <<<<<<<<<<<<<< + * + * have_start = index.start is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 762, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 762, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L11_bool_binop_done:; + __pyx_v_step = __pyx_t_10; + + /* "View.MemoryView":764 + * step = index.step or 0 + * + * have_start = index.start is not None # <<<<<<<<<<<<<< + * have_stop = index.stop is not None + * have_step = index.step is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_start = __pyx_t_1; + + /* "View.MemoryView":765 + * + * have_start = index.start is not None + * have_stop = index.stop is not None # <<<<<<<<<<<<<< + * have_step = index.step is not None + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_stop = __pyx_t_1; + + /* "View.MemoryView":766 + * have_start = index.start is not None + * have_stop = index.stop is not None + * have_step = index.step is not None # <<<<<<<<<<<<<< + * + * slice_memviewslice( + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_step = __pyx_t_1; + + /* "View.MemoryView":768 + * have_step = index.step is not None + * + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 768, __pyx_L1_error) + + /* "View.MemoryView":774 + * have_start, have_stop, have_step, + * True) + * new_ndim += 1 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + } + __pyx_L6:; + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":778 + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< + * memviewsliceobj.to_dtype_func, + * memview.dtype_is_object) + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 778, __pyx_L1_error) } + + /* "View.MemoryView":779 + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * else: + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 779, __pyx_L1_error) } + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 777, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 777, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + } + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + /*else*/ { + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":783 + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 782, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { + Py_ssize_t __pyx_v_new_shape; + int __pyx_v_negative_step; + int __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + __pyx_t_1 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":830 + * + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + } + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + __pyx_t_1 = (0 <= __pyx_v_start); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); + } + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":832 + * start += shape + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< + * else: + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 832, __pyx_L1_error) + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + } + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":835 + * else: + * + * negative_step = have_step != 0 and step < 0 # <<<<<<<<<<<<<< + * + * if have_step and step == 0: + */ + /*else*/ { + __pyx_t_1 = ((__pyx_v_have_step != 0) != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step < 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L6_bool_binop_done:; + __pyx_v_negative_step = __pyx_t_2; + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + __pyx_t_1 = (__pyx_v_have_step != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step == 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L9_bool_binop_done:; + if (__pyx_t_2) { + + /* "View.MemoryView":838 + * + * if have_step and step == 0: + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 838, __pyx_L1_error) + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + } + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + __pyx_t_2 = (__pyx_v_have_start != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":843 + * if have_start: + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if start < 0: + * start = 0 + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":845 + * start += shape + * if start < 0: + * start = 0 # <<<<<<<<<<<<<< + * elif start >= shape: + * if negative_step: + */ + __pyx_v_start = 0; + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + } + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + goto __pyx_L12; + } + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":848 + * elif start >= shape: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = shape + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L14; + } + + /* "View.MemoryView":850 + * start = shape - 1 + * else: + * start = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + /*else*/ { + __pyx_v_start = __pyx_v_shape; + } + __pyx_L14:; + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + } + __pyx_L12:; + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + goto __pyx_L11; + } + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":853 + * else: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = 0 + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L15; + } + + /* "View.MemoryView":855 + * start = shape - 1 + * else: + * start = 0 # <<<<<<<<<<<<<< + * + * if have_stop: + */ + /*else*/ { + __pyx_v_start = 0; + } + __pyx_L15:; + } + __pyx_L11:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + __pyx_t_2 = (__pyx_v_have_stop != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":859 + * if have_stop: + * if stop < 0: + * stop += shape # <<<<<<<<<<<<<< + * if stop < 0: + * stop = 0 + */ + __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":861 + * stop += shape + * if stop < 0: + * stop = 0 # <<<<<<<<<<<<<< + * elif stop > shape: + * stop = shape + */ + __pyx_v_stop = 0; + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + } + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + goto __pyx_L17; + } + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":863 + * stop = 0 + * elif stop > shape: + * stop = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + __pyx_v_stop = __pyx_v_shape; + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + } + __pyx_L17:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + goto __pyx_L16; + } + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":866 + * else: + * if negative_step: + * stop = -1 # <<<<<<<<<<<<<< + * else: + * stop = shape + */ + __pyx_v_stop = -1L; + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + goto __pyx_L19; + } + + /* "View.MemoryView":868 + * stop = -1 + * else: + * stop = shape # <<<<<<<<<<<<<< + * + * if not have_step: + */ + /*else*/ { + __pyx_v_stop = __pyx_v_shape; + } + __pyx_L19:; + } + __pyx_L16:; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":871 + * + * if not have_step: + * step = 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_step = 1; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + } + + /* "View.MemoryView":875 + * + * with cython.cdivision(True): + * new_shape = (stop - start) // step # <<<<<<<<<<<<<< + * + * if (stop - start) - step * new_shape: + */ + __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":878 + * + * if (stop - start) - step * new_shape: + * new_shape += 1 # <<<<<<<<<<<<<< + * + * if new_shape < 0: + */ + __pyx_v_new_shape = (__pyx_v_new_shape + 1); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + } + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":881 + * + * if new_shape < 0: + * new_shape = 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_new_shape = 0; + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + } + + /* "View.MemoryView":884 + * + * + * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset + */ + (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); + + /* "View.MemoryView":885 + * + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< + * dst.suboffsets[new_ndim] = suboffset + * + */ + (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; + + /* "View.MemoryView":886 + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; + } + __pyx_L3:; + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":890 + * + * if suboffset_dim[0] < 0: + * dst.data += start * stride # <<<<<<<<<<<<<< + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride + */ + __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + goto __pyx_L23; + } + + /* "View.MemoryView":892 + * dst.data += start * stride + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< + * + * if suboffset >= 0: + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_suboffset_dim[0]); + (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); + } + __pyx_L23:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":897 + * if not is_slice: + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + */ + __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + goto __pyx_L26; + } + + /* "View.MemoryView":899 + * dst.data = ( dst.data)[0] + suboffset + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< + * "must be indexed and not sliced", dim) + * else: + */ + /*else*/ { + + /* "View.MemoryView":900 + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<< + * else: + * suboffset_dim[0] = new_ndim + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 899, __pyx_L1_error) + } + __pyx_L26:; + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + goto __pyx_L25; + } + + /* "View.MemoryView":902 + * "must be indexed and not sliced", dim) + * else: + * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< + * + * return 0 + */ + /*else*/ { + (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; + } + __pyx_L25:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + } + + /* "View.MemoryView":904 + * suboffset_dim[0] = new_ndim + * + * return 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + +static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_suboffset; + Py_ssize_t __pyx_v_itemsize; + char *__pyx_v_resultp; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("pybuffer_index", 0); + + /* "View.MemoryView":912 + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< + * cdef Py_ssize_t itemsize = view.itemsize + * cdef char *resultp + */ + __pyx_v_suboffset = -1L; + + /* "View.MemoryView":913 + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< + * cdef char *resultp + * + */ + __pyx_t_1 = __pyx_v_view->itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":917 + * + * if view.ndim == 0: + * shape = view.len / itemsize # <<<<<<<<<<<<<< + * stride = itemsize + * else: + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 917, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 917, __pyx_L1_error) + } + __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize); + + /* "View.MemoryView":918 + * if view.ndim == 0: + * shape = view.len / itemsize + * stride = itemsize # <<<<<<<<<<<<<< + * else: + * shape = view.shape[dim] + */ + __pyx_v_stride = __pyx_v_itemsize; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + goto __pyx_L3; + } + + /* "View.MemoryView":920 + * stride = itemsize + * else: + * shape = view.shape[dim] # <<<<<<<<<<<<<< + * stride = view.strides[dim] + * if view.suboffsets != NULL: + */ + /*else*/ { + __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); + + /* "View.MemoryView":921 + * else: + * shape = view.shape[dim] + * stride = view.strides[dim] # <<<<<<<<<<<<<< + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] + */ + __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":923 + * stride = view.strides[dim] + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< + * + * if index < 0: + */ + __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + } + } + __pyx_L3:; + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":926 + * + * if index < 0: + * index += view.shape[dim] # <<<<<<<<<<<<<< + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + */ + __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":928 + * index += view.shape[dim] + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * if index >= shape: + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 928, __pyx_L1_error) + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + } + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":931 + * + * if index >= shape: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * resultp = bufp + index * stride + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 931, __pyx_L1_error) + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":933 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * resultp = bufp + index * stride # <<<<<<<<<<<<<< + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset + */ + __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":935 + * resultp = bufp + index * stride + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< + * + * return resultp + */ + __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + } + + /* "View.MemoryView":937 + * resultp = ( resultp)[0] + suboffset + * + * return resultp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_resultp; + goto __pyx_L0; + + /* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + +static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { + int __pyx_v_ndim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_r; + int __pyx_t_1; + Py_ssize_t *__pyx_t_2; + long __pyx_t_3; + long __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":944 + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: + * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< + * + * cdef Py_ssize_t *shape = memslice.shape + */ + __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; + __pyx_v_ndim = __pyx_t_1; + + /* "View.MemoryView":946 + * cdef int ndim = memslice.memview.view.ndim + * + * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< + * cdef Py_ssize_t *strides = memslice.strides + * + */ + __pyx_t_2 = __pyx_v_memslice->shape; + __pyx_v_shape = __pyx_t_2; + + /* "View.MemoryView":947 + * + * cdef Py_ssize_t *shape = memslice.shape + * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __pyx_v_memslice->strides; + __pyx_v_strides = __pyx_t_2; + + /* "View.MemoryView":951 + * + * cdef int i, j + * for i in range(ndim / 2): # <<<<<<<<<<<<<< + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + */ + __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2); + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":952 + * cdef int i, j + * for i in range(ndim / 2): + * j = ndim - 1 - i # <<<<<<<<<<<<<< + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] + */ + __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); + + /* "View.MemoryView":953 + * for i in range(ndim / 2): + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< + * shape[i], shape[j] = shape[j], shape[i] + * + */ + __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]); + __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]); + (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5; + (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6; + + /* "View.MemoryView":954 + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + */ + __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]); + __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]); + (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6; + (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5; + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0); + if (!__pyx_t_8) { + } else { + __pyx_t_7 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0); + __pyx_t_7 = __pyx_t_8; + __pyx_L6_bool_binop_done:; + if (__pyx_t_7) { + + /* "View.MemoryView":957 + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< + * + * return 1 + */ + __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 957, __pyx_L1_error) + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + } + } + + /* "View.MemoryView":959 + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + * return 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 1; + goto __pyx_L0; + + /* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = 0; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + +/* Python wrapper */ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":977 + * + * def __dealloc__(self): + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1); + + /* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":981 + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) # <<<<<<<<<<<<<< + * else: + * return memoryview.convert_item_to_object(self, itemp) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 981, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + } + + /* "View.MemoryView":983 + * return self.to_object_func(itemp) + * else: + * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 983, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":987 + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< + * else: + * memoryview.assign_item_from_object(self, itemp, value) + */ + __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 987, __pyx_L1_error) + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":989 + * self.to_dtype_func(itemp, value) + * else: + * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< + * + * @property + */ + /*else*/ { + __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 989, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":993 + * @property + * def base(self): + * return self.from_object # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->from_object); + __pyx_r = __pyx_v_self->from_object; + goto __pyx_L0; + + /* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_TypeInfo *__pyx_t_4; + Py_buffer __pyx_t_5; + Py_ssize_t *__pyx_t_6; + Py_ssize_t *__pyx_t_7; + Py_ssize_t *__pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_fromslice", 0); + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1008 + * + * if memviewslice.memview == Py_None: + * return None # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "View.MemoryView":1013 + * + * + * result = _memoryviewslice(None, 0, dtype_is_object) # <<<<<<<<<<<<<< + * + * result.from_slice = memviewslice + */ + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1015 + * result = _memoryviewslice(None, 0, dtype_is_object) + * + * result.from_slice = memviewslice # <<<<<<<<<<<<<< + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + */ + __pyx_v_result->from_slice = __pyx_v_memviewslice; + + /* "View.MemoryView":1016 + * + * result.from_slice = memviewslice + * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< + * + * result.from_object = ( memviewslice.memview).base + */ + __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); + + /* "View.MemoryView":1018 + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + * result.from_object = ( memviewslice.memview).base # <<<<<<<<<<<<<< + * result.typeinfo = memviewslice.memview.typeinfo + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1018, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_result->from_object); + __Pyx_DECREF(__pyx_v_result->from_object); + __pyx_v_result->from_object = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":1019 + * + * result.from_object = ( memviewslice.memview).base + * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< + * + * result.view = memviewslice.memview.view + */ + __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; + __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; + + /* "View.MemoryView":1021 + * result.typeinfo = memviewslice.memview.typeinfo + * + * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + */ + __pyx_t_5 = __pyx_v_memviewslice.memview->view; + __pyx_v_result->__pyx_base.view = __pyx_t_5; + + /* "View.MemoryView":1022 + * + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + */ + __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); + + /* "View.MemoryView":1023 + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data + * result.view.ndim = ndim # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; + + /* "View.MemoryView":1024 + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; + + /* "View.MemoryView":1025 + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1028 + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< + * else: + * result.flags = PyBUF_RECORDS_RO + */ + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1030 + * result.flags = PyBUF_RECORDS + * else: + * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<< + * + * result.view.shape = result.from_slice.shape + */ + /*else*/ { + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO; + } + __pyx_L4:; + + /* "View.MemoryView":1032 + * result.flags = PyBUF_RECORDS_RO + * + * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< + * result.view.strides = result.from_slice.strides + * + */ + __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); + + /* "View.MemoryView":1033 + * + * result.view.shape = result.from_slice.shape + * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); + + /* "View.MemoryView":1036 + * + * + * result.view.suboffsets = NULL # <<<<<<<<<<<<<< + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + */ + __pyx_v_result->__pyx_base.view.suboffsets = NULL; + + /* "View.MemoryView":1037 + * + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + */ + __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_v_suboffset = (__pyx_t_6[0]); + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1039 + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); + + /* "View.MemoryView":1040 + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + * break # <<<<<<<<<<<<<< + * + * result.view.len = result.view.itemsize + */ + goto __pyx_L6_break; + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + } + } + __pyx_L6_break:; + + /* "View.MemoryView":1042 + * break + * + * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< + * for length in result.view.shape[:ndim]: + * result.view.len *= length + */ + __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + + /* "View.MemoryView":1043 + * + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<< + * result.view.len *= length + * + */ + __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1044 + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: + * result.view.len *= length # <<<<<<<<<<<<<< + * + * result.to_object_func = to_object_func + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + } + + /* "View.MemoryView":1046 + * result.view.len *= length + * + * result.to_object_func = to_object_func # <<<<<<<<<<<<<< + * result.to_dtype_func = to_dtype_func + * + */ + __pyx_v_result->to_object_func = __pyx_v_to_object_func; + + /* "View.MemoryView":1047 + * + * result.to_object_func = to_object_func + * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; + + /* "View.MemoryView":1049 + * result.to_dtype_func = to_dtype_func + * + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { + struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; + __Pyx_memviewslice *__pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_slice_from_memview", 0); + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1056 + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): + * obj = memview # <<<<<<<<<<<<<< + * return &obj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 1056, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":1057 + * if isinstance(memview, _memoryviewslice): + * obj = memview + * return &obj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, mslice) + */ + __pyx_r = (&__pyx_v_obj->from_slice); + goto __pyx_L0; + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + } + + /* "View.MemoryView":1059 + * return &obj.from_slice + * else: + * slice_copy(memview, mslice) # <<<<<<<<<<<<<< + * return mslice + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); + + /* "View.MemoryView":1060 + * else: + * slice_copy(memview, mslice) + * return mslice # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_slice_copy') + */ + __pyx_r = __pyx_v_mslice; + goto __pyx_L0; + } + + /* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_obj); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { + int __pyx_v_dim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + Py_ssize_t *__pyx_v_suboffsets; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + __Pyx_RefNannySetupContext("slice_copy", 0); + + /* "View.MemoryView":1067 + * cdef (Py_ssize_t*) shape, strides, suboffsets + * + * shape = memview.view.shape # <<<<<<<<<<<<<< + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets + */ + __pyx_t_1 = __pyx_v_memview->view.shape; + __pyx_v_shape = __pyx_t_1; + + /* "View.MemoryView":1068 + * + * shape = memview.view.shape + * strides = memview.view.strides # <<<<<<<<<<<<<< + * suboffsets = memview.view.suboffsets + * + */ + __pyx_t_1 = __pyx_v_memview->view.strides; + __pyx_v_strides = __pyx_t_1; + + /* "View.MemoryView":1069 + * shape = memview.view.shape + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< + * + * dst.memview = <__pyx_memoryview *> memview + */ + __pyx_t_1 = __pyx_v_memview->view.suboffsets; + __pyx_v_suboffsets = __pyx_t_1; + + /* "View.MemoryView":1071 + * suboffsets = memview.view.suboffsets + * + * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< + * dst.data = memview.view.buf + * + */ + __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); + + /* "View.MemoryView":1072 + * + * dst.memview = <__pyx_memoryview *> memview + * dst.data = memview.view.buf # <<<<<<<<<<<<<< + * + * for dim in range(memview.view.ndim): + */ + __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); + + /* "View.MemoryView":1074 + * dst.data = memview.view.buf + * + * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + */ + __pyx_t_2 = __pyx_v_memview->view.ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_dim = __pyx_t_4; + + /* "View.MemoryView":1075 + * + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + */ + (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); + + /* "View.MemoryView":1076 + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + * + */ + (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); + + /* "View.MemoryView":1077 + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object') + */ + if ((__pyx_v_suboffsets != 0)) { + __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]); + } else { + __pyx_t_5 = -1L; + } + (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5; + } + + /* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { + __Pyx_memviewslice __pyx_v_memviewslice; + 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("memoryview_copy", 0); + + /* "View.MemoryView":1083 + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< + * return memoryview_copy_from_slice(memview, &memviewslice) + * + */ + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); + + /* "View.MemoryView":1084 + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) + * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object_from_slice') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { + PyObject *(*__pyx_v_to_object_func)(char *); + int (*__pyx_v_to_dtype_func)(char *, PyObject *); + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *(*__pyx_t_3)(char *); + int (*__pyx_t_4)(char *, PyObject *); + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1095 + * + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + */ + __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; + __pyx_v_to_object_func = __pyx_t_3; + + /* "View.MemoryView":1096 + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< + * else: + * to_object_func = NULL + */ + __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; + __pyx_v_to_dtype_func = __pyx_t_4; + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1098 + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + * to_object_func = NULL # <<<<<<<<<<<<<< + * to_dtype_func = NULL + * + */ + /*else*/ { + __pyx_v_to_object_func = NULL; + + /* "View.MemoryView":1099 + * else: + * to_object_func = NULL + * to_dtype_func = NULL # <<<<<<<<<<<<<< + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + */ + __pyx_v_to_dtype_func = NULL; + } + __pyx_L3:; + + /* "View.MemoryView":1101 + * to_dtype_func = NULL + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< + * to_object_func, to_dtype_func, + * memview.dtype_is_object) + */ + __Pyx_XDECREF(__pyx_r); + + /* "View.MemoryView":1103 + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + * to_object_func, to_dtype_func, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + +static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { + Py_ssize_t __pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + __pyx_t_1 = ((__pyx_v_arg < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1111 + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: + * return -arg # <<<<<<<<<<<<<< + * else: + * return arg + */ + __pyx_r = (-__pyx_v_arg); + goto __pyx_L0; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + } + + /* "View.MemoryView":1113 + * return -arg + * else: + * return arg # <<<<<<<<<<<<<< + * + * @cname('__pyx_get_best_slice_order') + */ + /*else*/ { + __pyx_r = __pyx_v_arg; + goto __pyx_L0; + } + + /* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + +static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { + int __pyx_v_i; + Py_ssize_t __pyx_v_c_stride; + Py_ssize_t __pyx_v_f_stride; + char __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1121 + * """ + * cdef int i + * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< + * cdef Py_ssize_t f_stride = 0 + * + */ + __pyx_v_c_stride = 0; + + /* "View.MemoryView":1122 + * cdef int i + * cdef Py_ssize_t c_stride = 0 + * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_f_stride = 0; + + /* "View.MemoryView":1124 + * cdef Py_ssize_t f_stride = 0 + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1126 + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1127 + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + goto __pyx_L4_break; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L4_break:; + + /* "View.MemoryView":1129 + * break + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + */ + __pyx_t_1 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_1; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1131 + * for i in range(ndim): + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1132 + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + */ + goto __pyx_L7_break; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L7_break:; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1135 + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + * return 'C' # <<<<<<<<<<<<<< + * else: + * return 'F' + */ + __pyx_r = 'C'; + goto __pyx_L0; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + } + + /* "View.MemoryView":1137 + * return 'C' + * else: + * return 'F' # <<<<<<<<<<<<<< + * + * @cython.cdivision(True) + */ + /*else*/ { + __pyx_r = 'F'; + goto __pyx_L0; + } + + /* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + +static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; + Py_ssize_t __pyx_v_dst_extent; + Py_ssize_t __pyx_v_src_stride; + Py_ssize_t __pyx_v_dst_stride; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + + /* "View.MemoryView":1147 + * + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + */ + __pyx_v_src_extent = (__pyx_v_src_shape[0]); + + /* "View.MemoryView":1148 + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] + */ + __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); + + /* "View.MemoryView":1149 + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + */ + __pyx_v_src_stride = (__pyx_v_src_strides[0]); + + /* "View.MemoryView":1150 + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + + /* "View.MemoryView":1154 + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + */ + __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); + if (__pyx_t_2) { + __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); + } + __pyx_t_3 = (__pyx_t_2 != 0); + __pyx_t_1 = __pyx_t_3; + __pyx_L5_bool_binop_done:; + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + if (__pyx_t_1) { + + /* "View.MemoryView":1155 + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent))); + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1157 + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __pyx_t_5 = __pyx_t_4; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1158 + * else: + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< + * src_data += src_stride + * dst_data += dst_stride + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize)); + + /* "View.MemoryView":1159 + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * else: + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1160 + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L4:; + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1162 + * dst_data += dst_stride + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * _copy_strided_to_strided(src_data, src_strides + 1, + * dst_data, dst_strides + 1, + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __pyx_t_5 = __pyx_t_4; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1163 + * else: + * for i in range(dst_extent): + * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< + * dst_data, dst_strides + 1, + * src_shape + 1, dst_shape + 1, + */ + _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); + + /* "View.MemoryView":1167 + * src_shape + 1, dst_shape + 1, + * ndim - 1, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1168 + * ndim - 1, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + + /* function exit code */ +} + +/* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + +static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + + /* "View.MemoryView":1173 + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< + * src.shape, dst.shape, ndim, itemsize) + * + */ + _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_size; + Py_ssize_t __pyx_r; + Py_ssize_t __pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + + /* "View.MemoryView":1179 + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<< + * + * for shape in src.shape[:ndim]: + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_size = __pyx_t_1; + + /* "View.MemoryView":1181 + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + * + * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<< + * size *= shape + * + */ + __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim); + for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_shape = (__pyx_t_2[0]); + + /* "View.MemoryView":1182 + * + * for shape in src.shape[:ndim]: + * size *= shape # <<<<<<<<<<<<<< + * + * return size + */ + __pyx_v_size = (__pyx_v_size * __pyx_v_shape); + } + + /* "View.MemoryView":1184 + * size *= shape + * + * return size # <<<<<<<<<<<<<< + * + * @cname('__pyx_fill_contig_strides_array') + */ + __pyx_r = __pyx_v_size; + goto __pyx_L0; + + /* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { + int __pyx_v_idx; + Py_ssize_t __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + __pyx_t_1 = ((__pyx_v_order == 'F') != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1197 + * + * if order == 'F': + * for idx in range(ndim): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + __pyx_t_2 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_idx = __pyx_t_4; + + /* "View.MemoryView":1198 + * if order == 'F': + * for idx in range(ndim): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * else: + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1199 + * for idx in range(ndim): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * else: + * for idx in range(ndim - 1, -1, -1): + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1201 + * stride *= shape[idx] + * else: + * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + /*else*/ { + for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { + __pyx_v_idx = __pyx_t_2; + + /* "View.MemoryView":1202 + * else: + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1203 + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * + * return stride + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + } + __pyx_L3:; + + /* "View.MemoryView":1205 + * stride *= shape[idx] + * + * return stride # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_data_to_temp') + */ + __pyx_r = __pyx_v_stride; + goto __pyx_L0; + + /* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { + int __pyx_v_i; + void *__pyx_v_result; + size_t __pyx_v_itemsize; + size_t __pyx_v_size; + void *__pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + struct __pyx_memoryview_obj *__pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1219 + * cdef void *result + * + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef size_t size = slice_get_size(src, ndim) + * + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1220 + * + * cdef size_t itemsize = src.memview.view.itemsize + * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< + * + * result = malloc(size) + */ + __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); + + /* "View.MemoryView":1222 + * cdef size_t size = slice_get_size(src, ndim) + * + * result = malloc(size) # <<<<<<<<<<<<<< + * if not result: + * _err(MemoryError, NULL) + */ + __pyx_v_result = malloc(__pyx_v_size); + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1224 + * result = malloc(size) + * if not result: + * _err(MemoryError, NULL) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1224, __pyx_L1_error) + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + } + + /* "View.MemoryView":1227 + * + * + * tmpslice.data = result # <<<<<<<<<<<<<< + * tmpslice.memview = src.memview + * for i in range(ndim): + */ + __pyx_v_tmpslice->data = ((char *)__pyx_v_result); + + /* "View.MemoryView":1228 + * + * tmpslice.data = result + * tmpslice.memview = src.memview # <<<<<<<<<<<<<< + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + */ + __pyx_t_4 = __pyx_v_src->memview; + __pyx_v_tmpslice->memview = __pyx_t_4; + + /* "View.MemoryView":1229 + * tmpslice.data = result + * tmpslice.memview = src.memview + * for i in range(ndim): # <<<<<<<<<<<<<< + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1230 + * tmpslice.memview = src.memview + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< + * tmpslice.suboffsets[i] = -1 + * + */ + (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); + + /* "View.MemoryView":1231 + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, + */ + (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1233 + * tmpslice.suboffsets[i] = -1 + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, # <<<<<<<<<<<<<< + * ndim, order) + * + */ + (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order)); + + /* "View.MemoryView":1237 + * + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1239 + * for i in range(ndim): + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< + * + * if slice_is_contig(src[0], order, ndim): + */ + (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + } + } + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1242 + * + * if slice_is_contig(src[0], order, ndim): + * memcpy(result, src.data, size) # <<<<<<<<<<<<<< + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + */ + (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size)); + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":1244 + * memcpy(result, src.data, size) + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< + * + * return result + */ + /*else*/ { + copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); + } + __pyx_L9:; + + /* "View.MemoryView":1246 + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = NULL; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + +static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_extents", 0); + + /* "View.MemoryView":1254 + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + * (i, extent1, extent2)) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err_dim') + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":1253 + * cdef int _err_extents(int i, Py_ssize_t extent1, + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % # <<<<<<<<<<<<<< + * (i, extent1, extent2)) + * + */ + __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(1, 1253, __pyx_L1_error) + + /* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + + /* 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("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + +static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_dim", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1258 + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: + * raise error(msg.decode('ascii') % dim) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err') + */ + __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1258, __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_INCREF(__pyx_v_error); + __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && 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_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 1258, __pyx_L1_error) + + /* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + + /* 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("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + +static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) { + 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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + __pyx_t_1 = ((__pyx_v_msg != NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":1263 + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: + * raise error(msg.decode('ascii')) # <<<<<<<<<<<<<< + * else: + * raise error + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_error); + __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 1263, __pyx_L1_error) + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + } + + /* "View.MemoryView":1265 + * raise error(msg.decode('ascii')) + * else: + * raise error # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_contents') + */ + /*else*/ { + __Pyx_Raise(__pyx_v_error, 0, 0, 0); + __PYX_ERR(1, 1265, __pyx_L1_error) + } + + /* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + + /* 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("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { + void *__pyx_v_tmpdata; + size_t __pyx_v_itemsize; + int __pyx_v_i; + char __pyx_v_order; + int __pyx_v_broadcasting; + int __pyx_v_direct_copy; + __Pyx_memviewslice __pyx_v_tmp; + int __pyx_v_ndim; + int __pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + void *__pyx_t_7; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1276 + * Check for overlapping memory and verify the shapes. + * """ + * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + */ + __pyx_v_tmpdata = NULL; + + /* "View.MemoryView":1277 + * """ + * cdef void *tmpdata = NULL + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + */ + __pyx_t_1 = __pyx_v_src.memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1279 + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< + * cdef bint broadcasting = False + * cdef bint direct_copy = False + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); + + /* "View.MemoryView":1280 + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False # <<<<<<<<<<<<<< + * cdef bint direct_copy = False + * cdef __Pyx_memviewslice tmp + */ + __pyx_v_broadcasting = 0; + + /* "View.MemoryView":1281 + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False + * cdef bint direct_copy = False # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice tmp + * + */ + __pyx_v_direct_copy = 0; + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1285 + * + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1287 + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< + * + * cdef int ndim = max(src_ndim, dst_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + } + __pyx_L3:; + + /* "View.MemoryView":1289 + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + __pyx_t_3 = __pyx_v_dst_ndim; + __pyx_t_4 = __pyx_v_src_ndim; + if (((__pyx_t_3 > __pyx_t_4) != 0)) { + __pyx_t_5 = __pyx_t_3; + } else { + __pyx_t_5 = __pyx_t_4; + } + __pyx_v_ndim = __pyx_t_5; + + /* "View.MemoryView":1291 + * cdef int ndim = max(src_ndim, dst_ndim) + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + */ + __pyx_t_5 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_5; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1294 + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + * broadcasting = True # <<<<<<<<<<<<<< + * src.strides[i] = 0 + * else: + */ + __pyx_v_broadcasting = 1; + + /* "View.MemoryView":1295 + * if src.shape[i] == 1: + * broadcasting = True + * src.strides[i] = 0 # <<<<<<<<<<<<<< + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) + */ + (__pyx_v_src.strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + goto __pyx_L7; + } + + /* "View.MemoryView":1297 + * src.strides[i] = 0 + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< + * + * if src.suboffsets[i] >= 0: + */ + /*else*/ { + __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + } + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1300 + * + * if src.suboffsets[i] >= 0: + * _err_dim(ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< + * + * if slices_overlap(&src, &dst, ndim, itemsize): + */ + __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1300, __pyx_L1_error) + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + } + } + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1305 + * + * if not slice_is_contig(src, order, ndim): + * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + } + + /* "View.MemoryView":1307 + * order = get_best_order(&dst, ndim) + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< + * src = tmp + * + */ + __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1307, __pyx_L1_error) + __pyx_v_tmpdata = __pyx_t_7; + + /* "View.MemoryView":1308 + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + * src = tmp # <<<<<<<<<<<<<< + * + * if not broadcasting: + */ + __pyx_v_src = __pyx_v_tmp; + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1314 + * + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<< + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim); + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + goto __pyx_L12; + } + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1316 + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<< + * + * if direct_copy: + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim); + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + } + __pyx_L12:; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_2 = (__pyx_v_direct_copy != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1320 + * if direct_copy: + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1321 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + */ + (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim))); + + /* "View.MemoryView":1322 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * free(tmpdata) + * return 0 + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1323 + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1324 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * if order == 'F' == get_best_order(&dst, ndim): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = (__pyx_v_order == 'F'); + if (__pyx_t_2) { + __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); + } + __pyx_t_8 = (__pyx_t_2 != 0); + if (__pyx_t_8) { + + /* "View.MemoryView":1329 + * + * + * transpose_memslice(&src) # <<<<<<<<<<<<<< + * transpose_memslice(&dst) + * + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1329, __pyx_L1_error) + + /* "View.MemoryView":1330 + * + * transpose_memslice(&src) + * transpose_memslice(&dst) # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1330, __pyx_L1_error) + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1332 + * transpose_memslice(&dst) + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1333 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + */ + copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1334 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * free(tmpdata) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1336 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1337 + * + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_broadcast_leading') + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) { + int __pyx_v_i; + int __pyx_v_offset; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + + /* "View.MemoryView":1344 + * int ndim_other) nogil: + * cdef int i + * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); + + /* "View.MemoryView":1346 + * cdef int offset = ndim_other - ndim + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1347 + * + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<< + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + */ + (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]); + + /* "View.MemoryView":1348 + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<< + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + */ + (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1349 + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<< + * + * for i in range(offset): + */ + (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]); + } + + /* "View.MemoryView":1351 + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + * for i in range(offset): # <<<<<<<<<<<<<< + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + */ + __pyx_t_1 = __pyx_v_offset; + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1352 + * + * for i in range(offset): + * mslice.shape[i] = 1 # <<<<<<<<<<<<<< + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 + */ + (__pyx_v_mslice->shape[__pyx_v_i]) = 1; + + /* "View.MemoryView":1353 + * for i in range(offset): + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<< + * mslice.suboffsets[i] = -1 + * + */ + (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]); + + /* "View.MemoryView":1354 + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { + int __pyx_t_1; + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + __pyx_t_1 = (__pyx_v_dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1367 + * + * if dtype_is_object: + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, # <<<<<<<<<<<<<< + * dst.strides, ndim, inc) + * + */ + __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + } + + /* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + + /* function exit code */ +} + +/* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + __Pyx_RefNannyDeclarations + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); + + /* "View.MemoryView":1374 + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif +} + +/* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + +static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); + + /* "View.MemoryView":1381 + * cdef Py_ssize_t i + * + * for i in range(shape[0]): # <<<<<<<<<<<<<< + * if ndim == 1: + * if inc: + */ + __pyx_t_1 = (__pyx_v_shape[0]); + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + __pyx_t_4 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + __pyx_t_4 = (__pyx_v_inc != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1384 + * if ndim == 1: + * if inc: + * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * Py_DECREF(( data)[0]) + */ + Py_INCREF((((PyObject **)__pyx_v_data)[0])); + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":1386 + * Py_INCREF(( data)[0]) + * else: + * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + */ + /*else*/ { + Py_DECREF((((PyObject **)__pyx_v_data)[0])); + } + __pyx_L6:; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + goto __pyx_L5; + } + + /* "View.MemoryView":1388 + * Py_DECREF(( data)[0]) + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, inc) + * + */ + /*else*/ { + + /* "View.MemoryView":1389 + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + * ndim - 1, inc) # <<<<<<<<<<<<<< + * + * data += strides[0] + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); + } + __pyx_L5:; + + /* "View.MemoryView":1391 + * ndim - 1, inc) + * + * data += strides[0] # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0])); + } + + /* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { + + /* "View.MemoryView":1400 + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1401 + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, # <<<<<<<<<<<<<< + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1403 + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + +static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_extent; + int __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + + /* "View.MemoryView":1411 + * size_t itemsize, void *item) nogil: + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t extent = shape[0] + * + */ + __pyx_v_stride = (__pyx_v_strides[0]); + + /* "View.MemoryView":1412 + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] + * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_extent = (__pyx_v_shape[0]); + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1415 + * + * if ndim == 1: + * for i in range(extent): # <<<<<<<<<<<<<< + * memcpy(data, item, itemsize) + * data += stride + */ + __pyx_t_2 = __pyx_v_extent; + __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; + + /* "View.MemoryView":1416 + * if ndim == 1: + * for i in range(extent): + * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< + * data += stride + * else: + */ + (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize)); + + /* "View.MemoryView":1417 + * for i in range(extent): + * memcpy(data, item, itemsize) + * data += stride # <<<<<<<<<<<<<< + * else: + * for i in range(extent): + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1419 + * data += stride + * else: + * for i in range(extent): # <<<<<<<<<<<<<< + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + */ + /*else*/ { + __pyx_t_2 = __pyx_v_extent; + __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; + + /* "View.MemoryView":1420 + * else: + * for i in range(extent): + * _slice_assign_scalar(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, itemsize, item) + * data += stride + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1422 + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + * data += stride # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + + /* function exit code */ +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__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_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_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; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb068931) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + */ + __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_Enum(__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_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __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_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[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) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->name); + __Pyx_DECREF(__pyx_v___pyx_result->name); + __pyx_v___pyx_result->name = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[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_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = ((__pyx_t_3 > 1) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< + */ + __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 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 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_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_tp_new_14cython_helpers_12helper_class_CythonHelpers(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + return o; +} + +static void __pyx_tp_dealloc_14cython_helpers_12helper_class_CythonHelpers(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + (*Py_TYPE(o)->tp_free)(o); +} + +static PyMethodDef __pyx_methods_14cython_helpers_12helper_class_CythonHelpers[] = { + {"calcShapeTensor", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_1calcShapeTensor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_calcShapeTensor}, + {"calcLocalSpread", (PyCFunction)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_3calcLocalSpread, METH_NOARGS, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_2calcLocalSpread}, + {"calcCoM", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_5calcCoM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_4calcCoM}, + {"cython_abs", (PyCFunction)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_7cython_abs, METH_NOARGS, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_6cython_abs}, + {"ZHEEVR", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_9ZHEEVR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_8ZHEEVR}, + {"respectPBCNoRef", (PyCFunction)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_11respectPBCNoRef, METH_O, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_10respectPBCNoRef}, + {"calcDensProfBruteForceSph", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_13calcDensProfBruteForceSph, METH_VARARGS|METH_KEYWORDS, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_12calcDensProfBruteForceSph}, + {"calcMenclsBruteForceSph", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_15calcMenclsBruteForceSph, METH_VARARGS|METH_KEYWORDS, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_14calcMenclsBruteForceSph}, + {"calcDensProfBruteForceEll", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_17calcDensProfBruteForceEll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_16calcDensProfBruteForceEll}, + {"calcMenclsBruteForceEll", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_19calcMenclsBruteForceEll, METH_VARARGS|METH_KEYWORDS, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_18calcMenclsBruteForceEll}, + {"calcKTilde", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_21calcKTilde, METH_VARARGS|METH_KEYWORDS, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_20calcKTilde}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_23__reduce_cython__, METH_NOARGS, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_22__reduce_cython__}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_14cython_helpers_12helper_class_13CythonHelpers_25__setstate_cython__, METH_O, __pyx_doc_14cython_helpers_12helper_class_13CythonHelpers_24__setstate_cython__}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type_14cython_helpers_12helper_class_CythonHelpers = { + PyVarObject_HEAD_INIT(0, 0) + "cython_helpers.helper_class.CythonHelpers", /*tp_name*/ + sizeof(struct __pyx_obj_14cython_helpers_12helper_class_CythonHelpers), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_14cython_helpers_12helper_class_CythonHelpers, /*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, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_14cython_helpers_12helper_class_CythonHelpers, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_14cython_helpers_12helper_class_CythonHelpers, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct_array __pyx_vtable_array; + +static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_array_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_array_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_array; + p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_format = ((PyObject*)Py_None); Py_INCREF(Py_None); + if (unlikely(__pyx_array___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_array(PyObject *o) { + struct __pyx_array_obj *p = (struct __pyx_array_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_array___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->mode); + Py_CLEAR(p->_format); + (*Py_TYPE(o)->tp_free)(o); +} +static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_array___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) { + PyObject *v = __Pyx_PyObject_GenericGetAttr(o, n); + if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + v = __pyx_array___getattr__(o, n); + } + return v; +} + +static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(o); +} + +static PyMethodDef __pyx_methods_array[] = { + {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_array[] = { + {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_array = { + __pyx_array___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_array, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_array = { + __pyx_array___len__, /*mp_length*/ + __pyx_array___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_array, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_array = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_array_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_array = { + PyVarObject_HEAD_INIT(0, 0) + "cython_helpers.helper_class.array", /*tp_name*/ + sizeof(struct __pyx_array_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_array, /*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*/ + &__pyx_tp_as_sequence_array, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_array, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + __pyx_tp_getattro_array, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_array, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_array, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_array, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_array, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_MemviewEnum_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_MemviewEnum_obj *)o); + p->name = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_Enum(PyObject *o) { + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->name); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + if (p->name) { + e = (*v)(p->name, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_Enum(PyObject *o) { + PyObject* tmp; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + tmp = ((PyObject*)p->name); + p->name = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_Enum[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_MemviewEnum = { + PyVarObject_HEAD_INIT(0, 0) + "cython_helpers.helper_class.Enum", /*tp_name*/ + sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_Enum, /*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 + __pyx_MemviewEnum___repr__, /*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*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_Enum, /*tp_traverse*/ + __pyx_tp_clear_Enum, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_Enum, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_MemviewEnum___init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_Enum, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview; + +static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryview_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryview_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_memoryview; + p->obj = Py_None; Py_INCREF(Py_None); + p->_size = Py_None; Py_INCREF(Py_None); + p->_array_interface = Py_None; Py_INCREF(Py_None); + p->view.obj = NULL; + if (unlikely(__pyx_memoryview___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_memoryview(PyObject *o) { + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryview___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->obj); + Py_CLEAR(p->_size); + Py_CLEAR(p->_array_interface); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + if (p->obj) { + e = (*v)(p->obj, a); if (e) return e; + } + if (p->_size) { + e = (*v)(p->_size, a); if (e) return e; + } + if (p->_array_interface) { + e = (*v)(p->_array_interface, a); if (e) return e; + } + if (p->view.obj) { + e = (*v)(p->view.obj, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_memoryview(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + tmp = ((PyObject*)p->obj); + p->obj = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_size); + p->_size = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_array_interface); + p->_array_interface = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + Py_CLEAR(p->view.obj); + return 0; +} +static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_memoryview___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o); +} + +static PyMethodDef __pyx_methods_memoryview[] = { + {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0}, + {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0}, + {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0}, + {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_memoryview[] = { + {(char *)"T", __pyx_getprop___pyx_memoryview_T, 0, (char *)0, 0}, + {(char *)"base", __pyx_getprop___pyx_memoryview_base, 0, (char *)0, 0}, + {(char *)"shape", __pyx_getprop___pyx_memoryview_shape, 0, (char *)0, 0}, + {(char *)"strides", __pyx_getprop___pyx_memoryview_strides, 0, (char *)0, 0}, + {(char *)"suboffsets", __pyx_getprop___pyx_memoryview_suboffsets, 0, (char *)0, 0}, + {(char *)"ndim", __pyx_getprop___pyx_memoryview_ndim, 0, (char *)0, 0}, + {(char *)"itemsize", __pyx_getprop___pyx_memoryview_itemsize, 0, (char *)0, 0}, + {(char *)"nbytes", __pyx_getprop___pyx_memoryview_nbytes, 0, (char *)0, 0}, + {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_memoryview = { + __pyx_memoryview___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_memoryview, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_memoryview = { + __pyx_memoryview___len__, /*mp_length*/ + __pyx_memoryview___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_memoryview, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_memoryview = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_memoryview_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_memoryview = { + PyVarObject_HEAD_INIT(0, 0) + "cython_helpers.helper_class.memoryview", /*tp_name*/ + sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_memoryview, /*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 + __pyx_memoryview___repr__, /*tp_repr*/ + 0, /*tp_as_number*/ + &__pyx_tp_as_sequence_memoryview, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_memoryview, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + __pyx_memoryview___str__, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_memoryview, /*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*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_memoryview, /*tp_traverse*/ + __pyx_tp_clear_memoryview, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_memoryview, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_memoryview, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_memoryview, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice; + +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryviewslice_obj *p; + PyObject *o = __pyx_tp_new_memoryview(t, a, k); + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryviewslice_obj *)o); + p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice; + p->from_object = Py_None; Py_INCREF(Py_None); + p->from_slice.memview = NULL; + return o; +} + +static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryviewslice___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->from_object); + PyObject_GC_Track(o); + __pyx_tp_dealloc_memoryview(o); +} + +static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + e = __pyx_tp_traverse_memoryview(o, v, a); if (e) return e; + if (p->from_object) { + e = (*v)(p->from_object, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear__memoryviewslice(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + __pyx_tp_clear_memoryview(o); + tmp = ((PyObject*)p->from_object); + p->from_object = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + __PYX_XDEC_MEMVIEW(&p->from_slice, 1); + return 0; +} + +static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o); +} + +static PyMethodDef __pyx_methods__memoryviewslice[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = { + {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_memoryviewslice = { + PyVarObject_HEAD_INIT(0, 0) + "cython_helpers.helper_class._memoryviewslice", /*tp_name*/ + sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc__memoryviewslice, /*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 + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___repr__, /*tp_repr*/ + #else + 0, /*tp_repr*/ + #endif + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___str__, /*tp_str*/ + #else + 0, /*tp_str*/ + #endif + 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*/ + "Internal class for passing memoryview slices to Python", /*tp_doc*/ + __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/ + __pyx_tp_clear__memoryviewslice, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods__memoryviewslice, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets__memoryviewslice, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new__memoryviewslice, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_helper_class(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_helper_class}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "helper_class", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 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_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_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0}, + {&__pyx_n_s_CythonHelpers, __pyx_k_CythonHelpers, sizeof(__pyx_k_CythonHelpers), 0, 0, 1, 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_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_k_Incompatible_checksums_s_vs_0xb0, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb0), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0xd4, __pyx_k_Incompatible_checksums_s_vs_0xd4, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xd4), 0, 0, 1, 0}, + {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, + {&__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_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0}, + {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0}, + {&__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_s_Mencl, __pyx_k_Mencl, sizeof(__pyx_k_Mencl), 0, 0, 1, 1}, + {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, + {&__pyx_kp_s_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, 0, 1, 0}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_ROverR200, __pyx_k_ROverR200, sizeof(__pyx_k_ROverR200), 0, 0, 1, 1}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 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_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_n_s_Z, __pyx_k_Z, sizeof(__pyx_k_Z), 0, 0, 1, 1}, + {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1}, + {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_b, __pyx_k_b, sizeof(__pyx_k_b), 0, 0, 1, 1}, + {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, + {&__pyx_n_s_bin_edges, __pyx_k_bin_edges, sizeof(__pyx_k_bin_edges), 0, 0, 1, 1}, + {&__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_center, __pyx_k_center, sizeof(__pyx_k_center), 0, 0, 1, 1}, + {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_com, __pyx_k_com, sizeof(__pyx_k_com), 0, 0, 1, 1}, + {&__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_cython_helpers_helper_class, __pyx_k_cython_helpers_helper_class, sizeof(__pyx_k_cython_helpers_helper_class), 0, 0, 1, 1}, + {&__pyx_n_s_dens_prof, __pyx_k_dens_prof, sizeof(__pyx_k_dens_prof), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 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_eigvals, __pyx_k_eigvals, sizeof(__pyx_k_eigvals), 0, 0, 1, 1}, + {&__pyx_n_s_ellipsoid, __pyx_k_ellipsoid, sizeof(__pyx_k_ellipsoid), 0, 0, 1, 1}, + {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 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_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 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_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0}, + {&__pyx_n_s_h_i, __pyx_k_h_i, sizeof(__pyx_k_h_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_inter, __pyx_k_inter, sizeof(__pyx_k_inter), 0, 0, 1, 1}, + {&__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_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_major, __pyx_k_major, sizeof(__pyx_k_major), 0, 0, 1, 1}, + {&__pyx_n_s_masses, __pyx_k_masses, sizeof(__pyx_k_masses), 0, 0, 1, 1}, + {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, + {&__pyx_n_s_minor, __pyx_k_minor, sizeof(__pyx_k_minor), 0, 0, 1, 1}, + {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, + {&__pyx_n_s_nb_pts, __pyx_k_nb_pts, sizeof(__pyx_k_nb_pts), 0, 0, 1, 1}, + {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 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_nrows, __pyx_k_nrows, sizeof(__pyx_k_nrows), 0, 0, 1, 1}, + {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 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_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__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_CythonHelpers, __pyx_k_pyx_unpickle_CythonHelpers, sizeof(__pyx_k_pyx_unpickle_CythonHelpers), 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_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_r_200, __pyx_k_r_200, sizeof(__pyx_k_r_200), 0, 0, 1, 1}, + {&__pyx_n_s_r_ell, __pyx_k_r_ell, sizeof(__pyx_k_r_ell), 0, 0, 1, 1}, + {&__pyx_n_s_r_i, __pyx_k_r_i, sizeof(__pyx_k_r_i), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__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_reduced, __pyx_k_reduced, sizeof(__pyx_k_reduced), 0, 0, 1, 1}, + {&__pyx_n_s_select, __pyx_k_select, sizeof(__pyx_k_select), 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_shape_tensor, __pyx_k_shape_tensor, sizeof(__pyx_k_shape_tensor), 0, 0, 1, 1}, + {&__pyx_n_s_shell, __pyx_k_shell, sizeof(__pyx_k_shell), 0, 0, 1, 1}, + {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, + {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 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}, + {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 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_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_xyz_princ, __pyx_k_xyz_princ, sizeof(__pyx_k_xyz_princ), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 133, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 148, __pyx_L1_error) + __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 151, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(1, 180, __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_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(1, 404, __pyx_L1_error) + __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(1, 613, __pyx_L1_error) + __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(1, 832, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(1, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(1, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_GIVEREF(__pyx_tuple__12); + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __pyx_tuple__13 = PyTuple_New(1); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_INCREF(__pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_int_neg_1); + PyTuple_SET_ITEM(__pyx_tuple__13, 0, __pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_tuple__13); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__15); + __Pyx_GIVEREF(__pyx_tuple__15); + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_slice__16 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__16)) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__16); + __Pyx_GIVEREF(__pyx_slice__16); + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__18); + __Pyx_GIVEREF(__pyx_tuple__18); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__19); + __Pyx_GIVEREF(__pyx_tuple__19); + + /* "(tree fragment)":1 + * def __pyx_unpickle_CythonHelpers(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__20 = 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__20)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__20); + __Pyx_GIVEREF(__pyx_tuple__20); + __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_CythonHelpers, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(1, 1, __pyx_L1_error) + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(1, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__22); + __Pyx_GIVEREF(__pyx_tuple__22); + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(1, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(1, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__24); + __Pyx_GIVEREF(__pyx_tuple__24); + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(1, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(1, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__26); + __Pyx_GIVEREF(__pyx_tuple__26); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__27 = 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__27)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 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_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_184977713 = PyInt_FromLong(184977713L); if (unlikely(!__pyx_int_184977713)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_222419149 = PyInt_FromLong(222419149L); if (unlikely(!__pyx_int_222419149)) __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:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + generic = Py_None; Py_INCREF(Py_None); + strided = Py_None; Py_INCREF(Py_None); + indirect = Py_None; Py_INCREF(Py_None); + contiguous = Py_None; Py_INCREF(Py_None); + indirect_contiguous = Py_None; Py_INCREF(Py_None); + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + if (PyType_Ready(&__pyx_type_14cython_helpers_12helper_class_CythonHelpers) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_14cython_helpers_12helper_class_CythonHelpers.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_14cython_helpers_12helper_class_CythonHelpers.tp_dictoffset && __pyx_type_14cython_helpers_12helper_class_CythonHelpers.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_14cython_helpers_12helper_class_CythonHelpers.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CythonHelpers, (PyObject *)&__pyx_type_14cython_helpers_12helper_class_CythonHelpers) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_14cython_helpers_12helper_class_CythonHelpers) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __pyx_ptype_14cython_helpers_12helper_class_CythonHelpers = &__pyx_type_14cython_helpers_12helper_class_CythonHelpers; + __pyx_vtabptr_array = &__pyx_vtable_array; + __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview; + if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_array.tp_print = 0; + #endif + if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + __pyx_array_type = &__pyx_type___pyx_array; + if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_MemviewEnum.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error) + __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum; + __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview; + __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer; + __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice; + __pyx_vtable_memoryview.setitem_slice_assignment = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_slice_assignment; + __pyx_vtable_memoryview.setitem_slice_assign_scalar = (PyObject *(*)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_setitem_slice_assign_scalar; + __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed; + __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object; + __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object; + if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryview.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + __pyx_memoryview_type = &__pyx_type___pyx_memoryview; + __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice; + __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview; + __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object; + __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object; + __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type; + if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryviewslice.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC inithelper_class(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC inithelper_class(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_helper_class(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_helper_class(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_helper_class(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + __Pyx_memviewslice __pyx_t_1 = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyObject *__pyx_t_2 = NULL; + static PyThread_type_lock __pyx_t_3[8]; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'helper_class' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_helper_class(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("helper_class", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_cython_helpers__helper_class) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "cython_helpers.helper_class")) { + if (unlikely(PyDict_SetItemString(modules, "cython_helpers.helper_class", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "cython_helpers/helper_class.pyx":11 + * cdef class CythonHelpers: + * + * def calcShapeTensor(float[:,:] nns, int[:] select, complex[::1,:] shape_tensor, float[:] masses, float[:] center, int nb_pts, bint reduced, float[:] r_ell = None): # <<<<<<<<<<<<<< + * """ Calculate shape tensor for point cloud + * + */ + __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 11, __pyx_L1_error) + __pyx_k_ = __pyx_t_1; + __pyx_t_1.memview = NULL; + __pyx_t_1.data = NULL; + + /* "(tree fragment)":1 + * def __pyx_unpickle_CythonHelpers(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_14cython_helpers_12helper_class_1__pyx_unpickle_CythonHelpers, NULL, __pyx_n_s_cython_helpers_helper_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_CythonHelpers, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "cython_helpers/helper_class.pyx":1 + * #cython: language_level=3 # <<<<<<<<<<<<<< + * #!/usr/bin/env python3 + * # -*- coding: utf-8 -*- + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":209 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * def __dealloc__(array self): + */ + __pyx_t_2 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_2) < 0) __PYX_ERR(1, 209, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_array_type); + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XGOTREF(generic); + __Pyx_DECREF_SET(generic, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XGOTREF(strided); + __Pyx_DECREF_SET(strided, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XGOTREF(indirect); + __Pyx_DECREF_SET(indirect, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XGOTREF(contiguous); + __Pyx_DECREF_SET(contiguous, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XGOTREF(indirect_contiguous); + __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":316 + * + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<< + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ + * PyThread_allocate_lock(), + */ + __pyx_memoryview_thread_locks_used = 0; + + /* "View.MemoryView":317 + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<< + * PyThread_allocate_lock(), + * PyThread_allocate_lock(), + */ + __pyx_t_3[0] = PyThread_allocate_lock(); + __pyx_t_3[1] = PyThread_allocate_lock(); + __pyx_t_3[2] = PyThread_allocate_lock(); + __pyx_t_3[3] = PyThread_allocate_lock(); + __pyx_t_3[4] = PyThread_allocate_lock(); + __pyx_t_3[5] = PyThread_allocate_lock(); + __pyx_t_3[6] = PyThread_allocate_lock(); + __pyx_t_3[7] = PyThread_allocate_lock(); + memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_3, sizeof(__pyx_memoryview_thread_locks[0]) * (8)); + + /* "View.MemoryView":549 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_2) < 0) __PYX_ERR(1, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_memoryview_type); + + /* "View.MemoryView":995 + * return self.from_object + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 995, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_2) < 0) __PYX_ERR(1, 995, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_memoryviewslice_type); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1); + __Pyx_XDECREF(__pyx_t_2); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init cython_helpers.helper_class", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init cython_helpers.helper_class"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* 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]; +#ifdef 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 *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 *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) +{ + int first_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) + return; + if (unlikely(__pyx_get_slice_count(memview) < 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + first_time = __pyx_add_acquisition_count(memview) == 0; + if (unlikely(first_time)) { + if (have_gil) { + Py_INCREF((PyObject *) memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_INCREF((PyObject *) memview); + PyGILState_Release(_gilstate); + } + } +} +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice, + int have_gil, int lineno) { + int last_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + memslice->memview = NULL; + return; + } + if (unlikely(__pyx_get_slice_count(memview) <= 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + last_time = __pyx_sub_acquisition_count(memview) == 1; + memslice->data = NULL; + if (unlikely(last_time)) { + if (have_gil) { + Py_CLEAR(memslice->memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_CLEAR(memslice->memview); + PyGILState_Release(_gilstate); + } + } else { + memslice->memview = NULL; + } +} + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; icurexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; + if (unlikely(PyTuple_Check(err))) + return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r = __Pyx_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* 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 (unlikely(!r)) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (!j) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; + if (likely(m && m->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { + Py_ssize_t l = m->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return m->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); + return 0; +} + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* None */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { + Py_ssize_t q = a / b; + Py_ssize_t r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { + PyObject *runerr; + Py_ssize_t key_value; + PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; + if (unlikely(!(m && m->sq_item))) { + PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); + return NULL; + } + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { + PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; + if (likely(m && m->mp_subscript)) { + return m->mp_subscript(obj, key); + } + return __Pyx_PyObject_GetIndex(obj, key); +} +#endif + +/* decode_c_string */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, 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)) { + Py_ssize_t length; + if (unlikely((start < 0) | (stop < 0))) { + size_t slen = strlen(cstring); + if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, + "c-string too long to convert to Python"); + return NULL; + } + length = (Py_ssize_t) slen; + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + 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); + } +} + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* ExtTypeTest */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_type == NULL || exc_info->exc_type == 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 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + #endif + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + 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 + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type, *local_value, *local_tb; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #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 = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + 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 + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 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 + const digit* digits = ((PyLongObject*)op1)->ob_digit; + const Py_ssize_t size = Py_SIZE(op1); + if (likely(__Pyx_sst_abs(size) <= 1)) { + a = likely(size) ? digits[0] : 0; + if (size == -1) a = -a; + } else { + 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; + double a = PyFloat_AS_DOUBLE(op1); + 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 + +/* None */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +} + +/* None */ +static CYTHON_INLINE long __Pyx_div_long(long a, long b) { + long q = a / b; + long r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, attr_name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(attr_name)); +#endif + 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 + +/* PyObjectGetAttrStrNoError */ +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +} + +/* SetupReduce */ +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStr(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_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#else + if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#endif +#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 + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#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; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#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_GetAttrStr(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()) + PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} + +/* SetVTable */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable) { +#if PY_VERSION_HEX >= 0x02070000 + PyObject *ob = PyCapsule_New(vtable, 0, 0); +#else + PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); +#endif + if (!ob) + goto bad; + if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) + goto bad; + Py_DECREF(ob); + return 0; +bad: + Py_XDECREF(ob); + return -1; +} + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + 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); + PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_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 ((0)) {} + view->obj = NULL; + Py_DECREF(obj); +} +#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]; + } + 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); + } + } + *out_start = start; + *out_end = end + itemsize; +} +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); +} + +/* Capsule */ +static CYTHON_INLINE PyObject * +__pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig) +{ + PyObject *cobj; +#if PY_VERSION_HEX >= 0x02070000 + cobj = PyCapsule_New(p, sig, NULL); +#else + cobj = PyCObject_FromVoidPtr(p, NULL); +#endif + return cobj; +} + +/* Declarations */ +#if CYTHON_CCOMPLEX + #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); + } + #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 +#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; + } +#endif + +/* Arithmetic */ +#if CYTHON_CCOMPLEX +#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); + } + 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; + } + 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; + } + 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 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 + 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); + } + } + #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) { + 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 + +/* IsLittleEndian */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void) +{ + union { + uint32_t u32; + uint8_t u8[4]; + } S; + S.u32 = 0x01020304; + return S.u8[0] == 4; +} + +/* BufferFormatCheck */ +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + ctx->is_valid_array = 0; + ctx->struct_alignment = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t <= '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} +static int __Pyx_BufFmt_ExpectNumber(const char **ts) { + int number = __Pyx_BufFmt_ParseNumber(ts); + if (number == -1) + PyErr_Format(PyExc_ValueError,\ + "Does not understand character buffer dtype format string ('%c')", **ts); + return number; +} +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case '?': return "'bool'"; + case 'c': return "'char'"; + case 'b': return "'signed char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 's': case 'p': return "a string"; + case 0: return "end"; + default: return "unparseable format string"; + } +} +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +/* These are for computing the padding at the end of the struct to align + on the first member of the struct. This will probably the same as above, + but we don't have any guarantees. + */ +typedef struct { short x; char c; } __Pyx_pad_short; +typedef struct { int x; char c; } __Pyx_pad_int; +typedef struct { long x; char c; } __Pyx_pad_long; +typedef struct { float x; char c; } __Pyx_pad_float; +typedef struct { double x; char c; } __Pyx_pad_double; +typedef struct { long double x; char c; } __Pyx_pad_longdouble; +typedef struct { void *x; char c; } __Pyx_pad_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); + case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); + case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': + return 'H'; + case 'b': case 'h': case 'i': + case 'l': case 'q': case 's': case 'p': + return 'I'; + case '?': case 'B': case 'H': case 'I': case 'L': case 'Q': + return 'U'; + case 'f': case 'd': case 'g': + return (is_complex ? 'C' : 'R'); + case 'O': + return 'O'; + case 'P': + return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset, arraysize = 1; + if (ctx->enc_type == 0) return 0; + if (ctx->head->field->type->arraysize[0]) { + int i, ndim = 0; + if (ctx->enc_type == 's' || ctx->enc_type == 'p') { + ctx->is_valid_array = ctx->head->field->type->ndim == 1; + ndim = 1; + if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %zu", + ctx->head->field->type->arraysize[0], ctx->enc_count); + return -1; + } + } + if (!ctx->is_valid_array) { + PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", + ctx->head->field->type->ndim, ndim); + return -1; + } + for (i = 0; i < ctx->head->field->type->ndim; i++) { + arraysize *= ctx->head->field->type->arraysize[i]; + } + ctx->is_valid_array = 0; + ctx->enc_count = 1; + } + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + if (ctx->struct_alignment == 0) + ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, + ctx->is_complex); + } + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + if ((type->typegroup == 'H' || group == 'H') && type->size == size) { + } else { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + } + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + ctx->fmt_offset += size; + if (arraysize) + ctx->fmt_offset += (arraysize - 1) * size; + --ctx->enc_count; + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} +static PyObject * +__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) +{ + const char *ts = *tsp; + int i = 0, number, ndim; + ++ts; + if (ctx->new_count != 1) { + PyErr_SetString(PyExc_ValueError, + "Cannot handle repeated arrays in format string"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ndim = ctx->head->field->type->ndim; + while (*ts && *ts != ')') { + switch (*ts) { + case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; + default: break; + } + number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) + return PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + if (*ts != ',' && *ts != ')') + return PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + if (*ts == ',') ts++; + i++; + } + if (i != ndim) + return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return NULL; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return Py_None; +} +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case '\r': + case '\n': + ++ts; + break; + case '<': + if (!__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + size_t struct_alignment = ctx->struct_alignment; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + ctx->enc_count = 0; + ctx->struct_alignment = 0; + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + if (struct_alignment) ctx->struct_alignment = struct_alignment; + } + break; + case '}': + { + size_t alignment = ctx->struct_alignment; + ++ts; + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + if (alignment && ctx->fmt_offset % alignment) { + ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); + } + } + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } + CYTHON_FALLTHROUGH; + case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': case 'p': + if ((ctx->enc_type == *ts) && (got_Z == ctx->is_complex) && + (ctx->enc_packmode == ctx->new_packmode) && (!ctx->is_valid_array)) { + ctx->enc_count += ctx->new_count; + ctx->new_count = 1; + got_Z = 0; + ++ts; + break; + } + CYTHON_FALLTHROUGH; + case 's': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + case '(': + if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; + } + } + } +} + +/* 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; + } + } + if (a->ndim) { + for (i = 0; i < a->ndim; i++) + if (a->arraysize[i] != b->arraysize[i]) + return 0; + } + 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; + } + } + 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; + } + } + 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; + } + } + return 1; +fail: + return 0; +} +static int +__pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec) +{ + 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; + } + } + 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; + } + } + 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]; + } + } 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]; + } + } + 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 (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_int(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; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_int, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dcd____pyx_t_double_complex(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_CONTIG), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_FOLLOW) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, __Pyx_IS_F_CONTIG, + (PyBUF_F_CONTIGUOUS | PyBUF_FORMAT) | writable_flag, 2, + &__Pyx_TypeInfo___pyx_t_double_complex, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_float(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; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_float, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* 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;\ + } + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_double(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; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_double, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_float(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), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 2, + &__Pyx_TypeInfo_float, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* 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; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); + } +} + +/* CIntFromPy */ + static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) { + const char neg_one = (char) ((char) 0 - (char) 1), const_zero = (char) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(char) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (char) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (char) 0; + case 1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0]) + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) { + return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) { + return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) >= 4 * PyLong_SHIFT) { + return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (char) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(char) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (char) 0; + case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(char, digit, +digits[0]) + case -2: + if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + } +#endif + if (sizeof(char) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + char val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (char) -1; + } + } else { + char val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (char) -1; + val = __Pyx_PyInt_As_char(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to char"); + return (char) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to char"); + return (char) -1; +} + +/* CheckBinaryVersion */ + static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + return PyErr_WarnEx(NULL, message, 1); + } + return 0; +} + +/* InitStrings */ + static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/cosmic_profiles/for_docs/cython_helpers/helper_class.so b/cosmic_profiles/for_docs/cython_helpers/helper_class.so new file mode 100755 index 0000000000000000000000000000000000000000..dd2de8a30bae36cf65dae9768f795cbc7af485bc GIT binary patch literal 1462872 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

4*B`m&qV8wdH>sG_?TUzz0aDC<9fp1-m5bVE-z zKC?rGFf54ta2ba!|GME4og&dRhTHgyabdiLx!sFtIMRpT+?VEH^qpyR6~vE=<0YoGRj%LB{kS*&Ob6~>kNJYcYX(>#dP7qp+Ft~0LK%!4wv@> zU4H%c5}1-!?q?S2D$3Zpvhcs;w+C`CHH|@j@1KNRtzXCwIgnq?*`S0&nU3SmZb7gIecMeYXT&BVBi^Q?ojeG4QNu zFP9IbUoW7(ecmS|Yc>psBM18Y;A?bB2wjc&uDP@fDdF4ECi`yZ(+KQ~7GQ?LwwL+T zB(QHaPr3nNj^ghh%!*=%_F`0Y>q;+V9>w*eb$(7e>|v`X%{TNnxSbCLzK3b(V<%{S z6ja4*8R_P_CO%^W4VY|lG(7NQd=r8SjX(DFHyz$#XF=ObYk#)>eixR&nviekveh;r zI0xl>xfX)`lND^oz(P(|_17EFZcqop#NqV=$h zwh_PCI}Z^tWw6z-n)#6WIX1e?Bq(1l*jbUzgguV=!KWrVRyO`&TFVMs4a{H3oJ-Tz5p#aF%eaUFh-24@2abm$G4>lJhTkNy=3QANV4Qn^3<2zUzDf6$7WhT`$+^$c7BVk%4+z531IS z{asITyp1hy(C+*@MA$sl7`vWC(wB#;C?CGVQ+3=8z{g;}FvW0sawGM8+RYv8H^Y?( z`4zSX%ufcD@XO#A{Y(kdxjE}#O88O2`R9a6`1d5#>SJOu#QT|Y*HO$>dym5Y0PAN; z_&>xxwHh(yd)lGJw}EB&Mi5)9{M$hGogmw8qYGh!?Pc5F4A}NJQ8kxu9%@NDsR-zN zTEf>0Mk@?Kb61UNcuPsb^3anWrLDN&AA3(X<2;6;*4JTY5r1iQwT9^1xZfE%h&b&I zaT<%Mi}k=R>>lh7+{+!sN7trl#(`E0`LIb}nDc$`Bhr#K`*@GB<{S7H2xGxlD|--` zM$`O~jWe49e^sY0-;DSh-^N-R1En+$Y*xZAB8gn3mtxf9>*ul<6;C4FEctA|-(1yT zzjGY8{tx?|qqviR?Z5Xsk0Ns^;hoH~`NWdWT3EZm+Vf;vqDq);`W<%PbGfSjleru_ z^V6PU?`R6XS$e6eH@1@a93yZhYKM>CbdN_*p)q+C@K;g2fj*@@MeS&815JO}G{HGp z2g^q^1t+$#y0F>!_@8LJr_fkDo)~X|j?>pNqCNjf^xQ%EDWctj^g~4Nf~7gXp7H7} z1t=k!d&T=sL}TNIeQX>+otV~iM!5pHhiC(nMQB}aTuQ>O;lf3H!|qs~j%zq;XXeqE zjB~vsR6WzLAEV|R2uxD-IemWJhYtH290N>SdSfjjW!g{nNXhjA{NoQ!2RKg0ee4}H zHdhS4Rdsf!BMQqDH^hd|+#Va~eTM_MsbosUI2sV4)W5EWiyz)12 z{sm!gbFMqU<=5znax!YpmJ9IZ{EVEvf69-1jQ7V#O4M~0 zDWT+b_TJ86KWMFH;HjqfNAV7W?4q*R_d(Gy`{?}{j;|!1$N0OG-tXt{v*=yp?>7_w3cSNA5OoDe z*vp^?%owk*Qj(AfDM!+SQhZj*CZ311W+`WJ$ps|&H2yxD-jC()SJL~D{QVtzANZBk z;!rQ%_wx6dgn!H5|3)~w&L17~9ldYkcm?rn1eep;W*AJD*;RUVL*ZM$O-WEl;0bGHt06z6|fv>Xh)Mcq(gW&BT^U7|Z#d;gCcp z?{s{+ayCxOQoXpj6PW2&p1anK*QCHSdQHdcus|lgX5e*r;J5UejaOIT1bX%0bwnVA zUa@1_KQiE=*P>`q`o-PRRz{DjES$o zWcYYJrwtZQvA`}pD?pB4H!CjjS~Iq5Ie=ItSz`o&Dq0edDCVn;V+RgO${809d`vc3I79CDLt~6Ua;2=tGIo7 zVTw9TO;%~S@*O2O_s~E;3On9(qUzj(`EQ1biz#Y!KISyV8U7q>sbSv_g%+mzqCw26 zGuTefxxhjaiLYkI<*d0EpS|L zJlI6@u-|i}IVBq0-ioveb6Lh9N8BwO?9HZ&|%p1iPob8 z(s4ST7gLopdYjo*B5KbFMGj^Ciab>dVDWng_Ri=ChJ@{dZ_)CAPVte3L0{efBMl2j zsLliGr0uF!=vEt7WaIpK{kA|8_~N_qBK(lt+J{p3j!UEJ?1o!&?dZ6S zIUL*Mm&&AQYe8JIHFl^Enz`c<5`iG$h~I)Ywoj;6^{G*{4;F=)JITKybotx5dlT6a zoUtW84?mj_>&W*YE6pm>(Oviy&U+2NkB6HE@lxb7`!CUdw$Ze$k=l>@Q*6Vk_n)xu z-&kX~F7VMzjP|qoU$)X8BKxWFoxflV(Xd^Nuf4K9d>fR||Dm)`&&PakBewSQGtfiw^Sw>^1F*cQqOr(?%)m{;jfp25wMZ;%xjbBU;zx2^|`B^yx|37r>>ps{B>V%oGxN_Y%C$0&CPk$qb7s-K{)IiJdkGYh+ZKhtcdqP1)< zoM!S^bPn|cR6d{S^dxgI6zIB~GDfqKAO=>22FA(%z+5y2dod$KiyjOebS_Jtwm^yC zBS#DeZ}GUz8X&R?g7R}J5if#x z)GO1?l+Z2CTiE>;CGw>(*&?_nYhga?-5rC0^Dt9fn&ed`JtTs&d--ZDO$7d7;XE0npA>{?6Omiz?S_usHliPqs zFGer83|>;;jMnph@>{c?#GKL5TGUS*DIyX51P9e&6*=>BI#-PIRiI1L4*LgKm+s`> z0f0Mn@XUZKbZ}DeX1w9Z*Ne3#%?YCCro_KOHF^&%Y({=1LMH~;I6euroJlvHoo4mp zod`_OKmG-tsPeKrR^{7KW%BQfow7ErtE^KYJwAgeQ*WiTP|A}? z*~U}WZM9nF{%29rIVg#(kLkSg|8#$q{{P(+%+GiM%2=0Iag){f+w-Iz7Q?tqi@6Fc zaX(uMP96VOl&geaAzRR7gO;nHgwYkWQ-D+h8thPcTrRszllsWd5jE$JGt1+(^q60)5(T(?oWF=*x{t?G~+UE z`a9+1`?Yj;x5%>n9Ka>iDg>8UFz%OQ3(kH?H{Etgm%jKxd)RO1!(PVGXy@K7&Bl@R z{Oh27i>t`Bu7I`l{A%nb;WRq<8``z{^WWg&(}DB-ZoN3$ub)lV<-fo*U)8VnVCxDq zrvQ%9XC(9ct2iT!@=N*Ha2SUJLpT^jVF<-lR@%ujcEN%C!%i#A`8oJ071n#dn7S==v!EbusAb&IOk1F9C;5hV+#}VAAt^!Fe`xNR+t>Fh9 z@4`RED=5jTzql&@2Dv=l>!X=XvT+&t4dr^B+OTmL`sHR-E5Rf^4>i(TLx6FSR|&s_ z7bBZ_*@UeZ;keyA=AU}BayRwJ%pEWQuBUnjFkEah#(>p2qPKlila7ySrm&InA!Op$ zL(W7i(jK|F=f~Q?`o3m|(T|JsJJLE#l82(Bxm#fjBTtxZ8gl>-%|POn)TRE31n|Q;?7N%=7qX!F67o<4UqMcj z%kuDeJ-ENjI?+_uUdn)lOET7_&;y&>Ik1}&d4UMrFVm-|v?A?c(h;{-F(1y{)#?sh zXY63zWI_e<53%w;h?D&|iFe>Vvhm-*c(@Oj&V`LHU^f0Mm1UoW(czRizSO4n-a9yc zSoYpx%!XWM?|;JHtsy1S%v7czx|T*52t@H$;wlP1))4kYIy=TRwtvbk9btZp@1L-u zGd_XA$kAvjN;uh>E?b!T7?+?_Vec<76#X=f**hP3$=+jHVed>EzaK~a=x?p=;Bee; zMQlRxtx3V7`AMqQ;T_lxY4Jno2$@?YFb+`MR7ZTGkXKa21|Irctv>rR^hmvlrWLcjEtS`kC7EHvKqOlhs1AbA6WK4C< zLS^uChAd|Ziuzb=^Xr%JqUh%eapg*B(up5uHSluk4FjJKwioUXDiK=u>Pt`5XW*vb zH@GRdWiWmJXV31P`aP?XN)joqvzW?%y+Yc#&@LI0t)9|d{ntC+jYLK}$qi~Vt$mU4d*dOX7<7pG+I zL+ayff1;;KWAD5rLAX%H#kOiI4r?_Mm{1c`^GcX*El?lPRMKn5woB10u_uw06{7DI%K2} zJoK3Obn}=v_y&Z}Kt=dLaErP9Z(IaN@BOo}hWmT(dqUs$`4vJj8e?u_n~mWNObjG{ z&nACe&YkyXM$mT?Zy=iB_y1ri)73O$VPiN3a5^*cYgKO60~lc&&1=DFT+fU=;g|EJ zaprm?(rAv$?D#|$qxojzBCsB2G*|AT@1LF@YsST z#Qj>L>8c*ui^_kKDZ#{}IQr~_G%!BLhdL-LemtpZmWN3r`&~Kj4#>gjJ(e+*y3$zoFmwL=DQWf!^2D`!P$8QH> zJdZT-eHQzk*NY#Prtf`N7fCmg9;IHN+jtipZs9Z@V+gx2rF%*W^&6{v9sJuKIviHD z;b}g6{NuI0{xLQ|Epu1aGo0d0Hafw|)zB_yCO%Jm9GD;9{Q;mmJsC*62devWVuA7g zsjkg<58y6Khw%%vq~L;yLGS5C^f9tJi(li*sj7O`ZF&;T8lY-7elXbh1sr>om88%r zC_1aG5Fa8HYByFX$6$!y8e&BuPFW{o{|Z-$0!R27C*fT7LPo}j#HLtyCP=ULSw6Pb zN91eYcrljhS!dJF5@WawJK?E$y6bq**j2;_d`eRRGN=_Ba9w|RUQS>{vT`Tgr>CRW zGm(eR(-`n071&L_d(s!jwM#>pStWJ@!5EDf@s? z_6W5BxkeycE2*a8CW=P2U1>f<9BfUd?Pix*>>mg-J9Fl*X;8xU?cknWd?T{5ac#HJ z50i^>UW2Wa$hV{vI?lh50N+Fe2>cNZoB`!1`eJ?t9rZD(r0fnv`vLFlx!&U9BKk8v zVmfUqVlf%3bXvBv4~j70(s!gj(pL#%%LFZltu^YYX#9uB4X9c6!MB;W-U^4;UAF+& zwlx0WY*?;V?8JvK)H27SWj>;o*|%~bTIJ}$A!Eg&XrVLbot5*oJ(J$l-f!P^vh)4z zzhb+q;(f}i&pQ_Fvj^?-L+^(a9}xEQaJxM^{%D+CAvQ;I)A3@Ae~9;HCzNA$#PyKO zT@>H3pY-Sk>>4@W&oNeBsaE`q85^4OP+rb5O#A0R=N#8tcfk8E(b~zr726x*PAYn@ zQtLmqPZ>M<*qrz(16xmd+A@qvztvo8z|I^Xe(+aweAhPTxWd4d2u*VHqE#LrFUq)> z?8|P>DB(B3uWGJRFhUdEbt%0-pFC~yOnP-5%Gs>kxfGS?y^GHq=wdNS9i3)uKo$K6 z-dGQgPK&>ck(b*8AI&59JCE>IUEYy9tw z??N~VyLuA&0NNQNz!QHPZwSFxKmr6EjYsb~V>D^1b%-&B-^W9r#cXL+nQ`|+tQr(N z@xu_TU1(S0)l1;DI9t!b!OZ$MeoOU&Tc9hPPa_!p{y&?ZvrNR#rMcmrEcR9CA#S=Ed!YwUGm^8_6?*k)B@ zV%dPJsv$J4U%$JFwef|jR*;O9<6XzFkcB1Wv7}veeG4Vym#OcKVVBvf+`A!fRF^NO zpWggATkzPJKkB2rQ-B@tDED^wbKc=hA9%v}e0~FJhF^rBU)Wf^7Vn4;M`)ef4Q0}$ zDSN$2ZHhAKvLbppPMP#4TB_5D{$g-li7|3qhoj$;ZA+Ks@=wR5%6n5%*?niv$_R2QGcp3rUR&Qd)}yRbaB_T6X;G) z7(WT{nau?B8)H!EcUtE{Wm$~OP{YgsT~<>O%A{pQWPvNebVZ6X=^AE%2E4HXQO7cN z&jHETqn@tJ9HqH{c^Y zxwd@wG1fB((N*l<;f`=LYh)YE4qeGe;|sI3hzIC!4cPjB)s29)e%bltp}Ft8fDZQ| zzMn)a{)u97GmB!Fw4sGM@sSQNdvBxLN24u)$5p?5%~F7&Xa*O4|wog9YPw|=rxAd#se69j^J$B zU{k?{=W2=;V58SgyvDyJn+=+$gV}|9PeBp0&t}G9vrh-Ji{L3?_IZr+z#hUr9n3C* zr;OQW1?Pc1gnc@gT?9`Rvkx1&^y!24>0ovdJax=ISzOMbeL9$31W!Zb0oaHBFN`?E z8MIHw>KJOvd6=n~eZIrs1hzr@bTFd`HZoPbgR!{2NQW2W3Owe9wBq^YUJPv+urBWx zSVaGVPd;LZxVCk4IBgvOny%rxjIoYJ6dIjr+(8GY|I`%xQ{=`!B^mgq%tIf6^q^RM zZZ+ttBK%WVMqh;V0R+)dhkrsL5XvO}NeO87KR>~Jo5UU&q=%3K z>9h_ab`N7`zw1EK9UvPIqW94m0V&hO*>?~LWmLw#i6~-EX6)#Qs|7oKIRoi`5$r{b z{eF`@<^Lk@&Euo0lK<}nh(v|yIKqgEiW(JMK_?D~8PgK98xzC@jf#k(h=Su55JfOd zx|N=$0UaEd(GeYWa2p+021pYY1$W%{eY@AFfD51^`Mp1N?(OaX&dhgte$VrIJ^VrX z-dm^6IaPJ)RMk1Bj)9ldpCZiH3-r>XoY`-55zNcY1qYjjZO@Yh@q#M{U`F98H6MK|C$J20&Qa>pM){bT)OsUMda^h4VM)7li6+_u0L_0^d{-xn6RlygW9JLhKd z&FNUbW8>$g+85Ng;AJE4rIP!XMOu^lf#spx-xSKdJIS~ixqoB#Lb)damE?XuBK_I7 zdh$Dv`!%bqZK-!3ojde)iqHX%@s692BOKz%cC(A{D76fC5Z;*CGC z=B;xVBw@r^nN(&GPc5A87fYS0WBxicnj5~6q_hJzr>$$)>2o(&NslQD>^F-_myFvDT4uU#ujqNEV%goC&>qTW=o8U2QRyF%_B|e) z+15IsC~BGVkZ{ex3N78=p z#uiaS4x!2!e=Wz5t+d&CbI+ResJ84S%B>KpR?w1L(d~HSdV;vKsRoTS82(P~7U`v{ zh<56*D+KFzT50_#?`j0<>&VH?k^M`uud!Pmt8FH0rV)NfR$V_PYx{t}vL&T7G+VpPK=GDh!%Q&P9lUZM*~k zBa596BNE0!Ug|Y({Zx~^XO(+X85AFv?8O_uEcSNGNCreyES(x~A)E`7AMs=q>xlZI#4 z2+7&%!tYa|zA}8NwXpfhok7{}h|>C=-nR5GkiIGwcsSRSF8NHK-TG;G{u6mQqAY;x z2Ha(@k9*ZS+o=++1zcp`Jvb<0LY|p3W_~q#awKd^Kyn<$LcC-Xf>hZ zLfE?k*rn{nq?Mj_&$`gB>3d1*7HW0lq%uMwgnMcEc|C%Rh$Sy|*Qx?y?efdiYReJ3 zc-(b@c4uIm)M9bYR|e}-=q!egyK%DB8~ZUb*|Lch$|&|Y@KObT1ujXeCQlSQdQJ6W&mpoS=|g_y&orOe>yb!j9 z`8(aI@&BnXxg%LR{ub<=ZlFk!*Pm)Ei0a0rYVN65Um~+MACX|oKD>;YmD<7@yrponM&C5=aHu(k-UrL=@2i=a z&euH346_AdSuIUd`T4D=nD0K2G?K)2+%F_+pF&?J|ITpM{>n~4CX?;ARMR)!Un$$8 zp@FK>6;sBl%WZ6rJ0XljMFu3>l;N^7n5w{J_R^&7q;tAf&@@!f^C()gmsar{wcDy_ z_h*lUb8|-|q%J$0?#W(S%zN9(C4H&R^rSQX0H=?TFXeUa5u5UpZr_U}=QD!fOSSlt zuGmj)-Dojs8_1+7jfGPvd$EL&{I=X>5F-m+BzXuUT3a`5@o_(UIIql>-)wV5Kx_Ob znD>LN#IE%Ad^aF3E9sF0EJozqT*jrFk;MIa5w3Bz6UzP-_fTQ|fp$!)f61OaM3U=F zAQlON$HraS99vO_^Id+x zPuMl~xc>s+!TUD(HjNurCsWQ{+*-eFT!Wef9qNIe%W^p zkSVjb_n~c%Smu9Co!+?Lt3QwX-x1Rb^xH~rgvzbvGv%D!i^D#V-bTzKH3lSLry0b_ z2aU0THK~QL)sr+DF@P%~NF24AnY*LaRL!b1I~Zkuv4GosByP|saH-kQS%@9DWq5S z5f!^`L-;I96P3YW?*%GZq38_RoU%R9yG$4w_p&=Ts14tu?qyaoC?d&@6p`U`G!65A zP_#N-^3pFgSt+qd7g5Q4mX!=}U%R3dH#X7j+fGexXb?Rm@5IX8WM)r0*jLt7(mU0I zF4ph$NK)6$K*wAEMhdTa_ zoRR`>@Tr0)CYnB9dK2|=PaXq$tGrnR0pv$$x|Vx^K6Ib z`O63Lvs>3g^wGH33$=&md6Y2fK4ceHVD%2J4>e2`m4>Nn?_8PhkoD}>D$&gN465x3 za5#HbOjND%cW<(?oo^rxO?^zd&HN$=@gOKp%MJubw9dZ+hIlIwH_<71jsnb_hmEKk z6_4C&CB3WF%fa?3kTyHxQy^_x3xFPhe~9>f$ctFNI%ZLe@-y*DqpW^9D6Tm-$2PdblEm?#&Y>Nq+H;iU@*XcETLl;1_zy89A z)<6|fO8VY%JHpTjVRVXU8YD*%odJWq^IoTxsiG;l0HE_cDcI~Y4x&mBM+ssS5NHV< zBk&HPVcPskiMc8v%MNtg3V3G$mjj$1KX#rq*yXN)KS1s4NBp2&JIbZWe#cH(JI>fg zFJS-lBhgGukp4&@3u6L9ti+L=QCMH-uV2dRd`RFF0hxcS_xEWj;lm#IH`4@RR z`*@y0;J&AC0?biC1IC~xqQ#sLPjx9b%laX8AJZpshFVQb085=k99n)Jd)e9j3Qrbx zl94TA?h~L%72qNQuiL{U6mu95FjxN{!k7yPoWcnn=gKZ+zo6A&P+CJXi=>NMZXMRz zf=Q9fAA0q8*!nX8fug3X%NTfB`MtEho;AmOEZ_q|5^(hDKf%$OSA}GgSb&J>^`?Rr zZT)ASl3mt==imer9l()T$)zgZxzCyc^sA9^^1J*v4xqDg^Ayxsy|qc~57*)^PqbF$ z{C^?T*vRW!)jL-xt_Fqd0tik&RKo8Ir0kLF_5FSKUDMc9J%1EFuk|MA`4RU_{TI6W zzn(??i5xZ!o?TS`hXCg5_aQ^neW2auYTt|;o$ZjU zx1)W3+zylSo%qFF)Z+F|vnA3w>yOex<0LvqS#`dQBsJAHT@Nzz$QF=ng zRekLN`IKEe@)Dw8* z!7z2Xjeouc@@?*k@pUu)`8yq@6S}@n)0i(0m>KxzLx@d>7DneI_0cStvyqUx>~(Zc z{`qd|52{c)tgAXR^#umUrvCY}uSYxQ{PTxTqr!AWMs591{PQoi0Pw%j6eVT{&_d>7W(IYpFJ zOd}%j&tE~{knXnrd9%v>_x)b7t|gR1Wfw zG9W)et;_l6F<6xM&))*>-}&dCjxnYd`sZJ%*ni(YKOS|ziGP0oSehC5=LfY9{quUd zTtxx4{7Z`MCw2X%hdKYvRf|L^$cb$@}?_groA zVgq{<|9r5d*ZlKq#J)}a^TTFKA}j9P7rWwx+Y0>ise%vv^N#9Mfq&jw1aUK+uO#eD z;bT&Pe|{0j!r86sC;Di!TMD&@f1VJ=js5dS3{%C;hN=Y*`a^kv7qD&OZcb^2i$!@@`aZfHQr1>H*;Kb@=+uPIK~z`{!Sr^ zL>J7j0Cn%1L2Wm6M7a{20a6Da=5-KErZSDZdRc6QLT_}*%Rds zR&VCn(Do5$xALr`k6(FPi$&%tj3Y4s)6HX4-7+JL_fb>7$<*{Pe33EL3+>tRX5NAF z_EG=gC7Y~DUR!Ux>`4I)fK{sR?*-l#_&1?%nn(lmtv>o^=z9tkL*Fkz{qN}88_@rd zzKx>qia(2bL=Wl%`mVbX`eH4Lz9X-q*TbI>MBdwPL*GRRRvY^E9<>?z-Xr=H()Wsu z>HEgz)O0+^HcQ{9`4H0gk{^w}%PAoG&QyJyqi69+ zYIFS=M1pjyn@D>E0d)!Aw$Q;YtDfiGGd;^*sH#q+s+K>_RJ<$B!aMIR)v-2o5p1g8MIUNY zqk7N-B~ns6%)f%_f^`*dTOoau^$pU|d>K!DK^`^r!;J@Q@cx6DjJWe}y}Qx1ATX!= zOW}HG{T13sG{Q@sm8Ygw41#?g8`!#KOKw_fXYq8p5!xN#tl!rh*!s@ljX$;zM)9Kw zlqz`HKq1o?BZSSI-e+1~3;GdlDuNoUT+c&FbQ&7+FS^die{}*m-gikGT*QAQzu3ix z87*LY(3*n{bF`@g=*HczW~?T%rR?Rdeu+o4shz%FE%|v#U$0{S-AZq{el|P)6zCJX zxfg+2I8_~pBosF!oV54pc~YU6P&W4nAU1Nq*m!2x;{+n#xws~to`k-IMQ*4@5=#M5 z{FAG;w8J9vtvw&lvWLYmQ~Q!@gBumJr067>{yfg{x0XvDR$nTpRHlLD2e6)U@`B1y zCb?YS#((u^9l&9KVmg=i8iWrU;_`-6Ru4iy5+~_S-wmu1kk4@AeXh(x;;Nmc~YsjViP65;%G>Cky*~+lug}$Ll8+3Wnm{ zaq9e8!BDElQiSZ1e@ZaAhjqz5Frtk+BS(Xk`e^(c9QI%G@j9<<2@ZW>MWRi|?g8=H z=JuI4Uu80#D~Z<5`!!T@n@Y}_0#9cz)TTx8yFl#P^7UC*q@Ews8V+?sI!Z|02s~aj z{YA|I59e(~E(Oa|`T3R{WV5n0dV4(%c$tB!^w-IZl?T6#GD9vL5z( zuZC;}sk2!Bw4@=r!iyY;SZ%ebTI!zL03urhUPCdjSmGJx%K}O2+hV&GtJfBVmK#gW zk9)65t^^v~Y&9IvbWwOE{S{k;R##-&O|;!ix%OZQHVaMQ9lN%UFCW4G!^(9~>GpE9 zg&+5p&vZW?E}zYh$TpUHj}HsVA8;S0l{edmn`LhDVOIGH_v5DW_wBjx(>nLOpuC5D&y?DqYrEN>n|s=yJNnw6`(pOzkvjX+ zG@3u`;nHk(gi8ZB^<_wD(M9F7*SgQ^yx_AolU^4u3>e!GJD#svWm;x@*n+1p`JXM> zOoG?(^p&$|VNJ@C0@h@j)bUv65w*y1HkA|raH3r_eZpv+dL3+MWUp+nFM~(u)d_X6 zRFEaBx_oqGo1{J}S;?}X(?^`s1 zd_j*0PfhWUBvJ3t&ruyGt{2)g6Kt_nzU$ zKo;bbFpGP6jO5l1%{SypMLmqGtLgV+nCJ6}915sq3~QL*j|%>dB4n1-p0MypMj^ zb+ywE{#!o^WrFrdYM%GzoGdk3V&BzYo3*qmbc@tl5EY&cu%q7%wBDRlElnVW<0gBf zz|eAu%crnXz4nghP1yCTO6a3HK%Ns>2&u1>+k}I?E`O%vjF$W5Kw@P*9F3`z;$tI|(qWIc(uI~DNK5}`Yd5VYq@>Hir9T3GtU11r0}kV?X$ct$uZD_95H>qjApkvSg5pr zQmp!^jt*uzUjer26lTd9FuidZm_DAXp0m#P(of3Ry2k&Azw%?1Z!Ll0qFxEu66@D6mMCTMW?f(Ebj zYG|-O2+oG{Xr^-e^J(uac&v$Z$@fUkyu7{RZS8oDrIapt>`M)Wic$*5e_H{rFt5kF zAD{@77&nbGJpEOra%J$Q@+tD8d9OT1YfT{}KZiG(ju)RuOWxtZ>>BSS_^RcC+vy8< z_5;s6QP~I%nnt0S4jNJ9PT|OOF3ka{lK>4D&^Z9Lyg}mA1KrC$7h3%5@M~luAT7I4 zLxKFUKOB(}(X}OeBVKS5uD2sZpO;|Kk^tXF|y# z1e?BYDt}sbVFyH!p271mBTe^wb$$N}T;*5$yhxs$^b93}OkXj!_0i@0XnnNV{@0Au z`sf4p{~Y^&w*9Z^q4iPCO0ADd-?u*6p#R5DXdQn+>-f>F<43fPuWKDYq;-6(b$nIp z_`a>-cW1Q;l>d-M;+7>^hk2O=!^R5^v(yjmfb9M2J!DtJE3HORd!N!tNpEI&dWRtXhr_e=zl~ZZe(hmm|M;F|hD-lV) z%s1_-I8cDgc(Cy(z1)L0E!PC|6%b{5&O{enohuz^UhrZWPvHcS**E@vP_ri76?3pX zF9jdIviw{z7Z4*YemR@30toP54J*HAiJ@ z)7y~7@>#u)XD%<{En{?-+SK+nsqJdgwD6Fc)K;-nUl4z5h$q~{_VKf-82{ww9*0bB zk8)wd)VLYm{q%EQlT)Po62HstLF#67JnP;9ocUmDE7Z6YXGcOCy1Kz}o`jl!Bq7Zx zgrY)e&Z~2`UxXWmr+ne8s-t7o=_AJ$oQ+MCi#*yEaN>km>d^AI4#>%4aan0%>BpoP zxaTD@yGvWTS8Dn_6^;C9N%fX*)bv}SOf;nXsEYjQ@#vN< z)w}Y}($!c(nm<{Rn#2p_>BdHgW@5TdB68)uJm3RtMZ)nHd^;e*6UkPNFCW5>opp7l zs0nPn{1N4(IkUV6zm$_^ta&Qq`Sq~1i9{ClgZQSTG?$n6=9iMvTyCDsD1O~;z6z-< z>dX12tTff-Rs2#`nrY(hU(n>v7lkUKHgbmd%v$wv(DySY?<`{q)f%tI6o3t*+hU65A zF$*mrd^GRS4pOhw8BNZuMu25;B<8I5}zOFI7rplnmQ=vVoIK6c=vUvJt{&4EP> zay!OEe7UB4NG$z}SZbP4C8~1|iM8<4t|aCw766y;@S`r49?Xwv<=2A(IL;^7IJn+|s{)Q6ZioPCzndK>Icho>=&^kj zB#E(P&5uO6vGo67ACyFp_?VBy>SSEIlJIlp={8 z?W0Q-v@=J~0{_X(q)0-yLRi4R-xK4$z;ZqHBblsFi*t!*>!Nx2vdj*9 zJ3mC|$=IG<2)~^?yekuVoBLq-6f@+i1o#I5?n5)OPvrm~5ukUkn#x$k_wbLj0@Rq7 zk7aJOIH^QdoPb!?IkHcSurv+<0Zwue!qqte`8y^hT|pc|0Re7y0o({DAXhp##32+A z;3O9zzR|!TAj2J8fq(#~u^7T#02~5xu!AcQ5a1*iA>0Ju5RhLuxB>wIt~m$igauFp z#h4#A4fvHEq2pu_vvE?7Y%}m9FV9BnshEMzI)5iBTF6Kf3 zRfmnNdwUm9j;pzOB)q_ma(I)GsEqoABwSIctd&Ufp0`d(SHZ*okiPqizB4C_dU6H=`pzZB z6Rw{Q7)!5rzDp24L*FS>*M`2UVw<7w7|BN=efQp&zBimkO%73QfF^Bw@Fo1Xi=#El};< zD9FH4c~!E;mUG1%pHska2|-0g!7C4L$A$M6J0!DOwUT%~&;YODLVOkIK1?z z&#B1Sy~wD<;8JvC%VPHL??d|}Uym|=Uwg~st0#bxuT|jS9^U-qOn>B$$5U&fLu*ry z2g|*re0FKk>zKUDS;HytCaTM0eVWNn#~i+*o_klqKu09OAv-E@^LHPD9c}JEe}bL! zF5VGOKQfzcifqNBtm#S4S@O)jl+}G+%O%aw3xG45ak@lC@XU zq10zJsb6!}qa;Io&P5zFdleN`Rq@!Li;zq86m6KyZH71iJuEZzG6JM}9ZL;kRwhnS zrEk4Sa+Em^QCp?sU%KyL+2K~29ED8Ghx59qVZyNE>fg87Jf0qRfsRhByxM3TNsOXl z1hC01J-CdEUv=jb^9xcssjg`9rCgacA)400e81w!1LNsTgBqZ_Bfg^CoYML(+)z7b zi%60^&V&oN-0>!UaLLE^u{775KNnlH;jmbr)v;cyb;09|EA$a+oTI`d`;Vt>O~AAP zlL#WjeTGv<+OJ8Hqy2@paZ)KicjqVYt^v*U?PKXOP99H)rG^fPr>~u=b}93s?gD5= z(2%4T1w>B9&bI4;tSjE3g~nFz*a1N{qgZ-ac?{R7 zdvG8f%yf5YU7^REi~mH^wPV>MB5_I#QhU-R#Rc_^qdr&JLns3aBemROafEcnsH643 zUr_-`UpAgLWJ)?rked6xxHi3oWFT@RDN%nYjzx}M?q=GOIQ5=DwZ*wMw=%%% zPPUaSor)2yB1tV@`%m+q^A{U8umE8P?m5N##}9`x-BSD%-yxZX4@YsK*|g4f~|W`nfghWFP!#1k?0bb?Q|w zif`&RAYmDU(zF=tzl-0}Vtq37JEz5#5fS zhpGzo84KR=^d%S6q<-{v$v}F|CVQHiII&QlEunYu#w+TIBGY$6V&mzfolZ;l;Xaw- z$+hwH!UhNuO*IopVLhDHy51BauvFirCf!l$ZG{L#-rnRK&^z^ZSe)Dhi`E@h(`Q*t zuVr!!XQcV)upqo$1!+3&DmVOSTzB3%9mg4E7!@zo`QHvP#>!;0*e1;o?bVE5aRE>% z?MU?CMZ9qx$Ng5(A{w#-*{nIWxN%F0feTxbFnyl3y*%n%@>kgH8q9|XnTw?jWSMkJ z(Jwg+yl7lgzV4?fUw#IlBA-zjtCTJ<#|$0frk;U_ETPkZ=;eHupP&+hx>i~^mOh3# zN;m9iuCg^?SC)0JZDN2elZG7=S>9!D$Q^AlJ!-nj)O59z(}cU)rsVw>!NERo`Yto-E;^c@uS8p0f3+yR zEII!xQ?>~><=Q2OG|$cYtz(T75Qo$gypGO=Ek!;yn^01(0`;L{NkMV@X-s zn)kOc1z8~Vk?BhPEMeTcO@YIM0z>)gpT~dVd#3Xa7pOZWw-fgIm-CDNf}3A%b?ymF zxCQdmo$QwykzD_593>7QD1xd_mpnolNHr?Qx3LuQUo(O4l`h%a z;b;kPeAAzXXo@w{!Y70p5FgOi6`{CPVMl=SzE zR${e-mDlNrzWjFrJ9bBrUXk#i!u3{iNGwB49!Ib%jsE8jFceCpR$^Rt--d^8V)w-R zy^Vk1?u5L&ynAix{aDI}hHsOe&b#WH;HKKa9n{J*%SYJ$b=?b7L%xQ-d5mBRk+Nm2 zEk@5_{DUx7gcv&oIKaq$(+yHRY*4L&{+~Yw_xc@)sJu>Ry^E2lAn)GnBswqsA+XvA z7WWzk2h$tOT8XT zKWrJNvFv{xSoVY5qKIU>z_@qwfrR&}L-|5xAP&jAjrBZeWQW^g#Vfe@oB%b>p6yEQ z?fDh5%ajM`Y}_HeRyx*g@wR1u^|fjFA{!5u2k16s0}X(_>gRx}3`j}4lu8p!a;!q2 zCj+3E0V(@d0Mt+bbbA2A@PiRev^xNrxLY366#-D40bK@#1SH9xQOScwPH+E0)Lq`* zv;3p}?$Q}Js2hGAc6FBPg{y?_mItVN3w2WK$;!YLcowZsOW$>kjxn`&%<;kL-ivsS z&Sf7VA3L8zJjIy-DJWN${b*}gk{DDJ-2vX$yy7uZlG8e`%N=&K*t zJOg^`2g?Zqdg=!wbwCeMlHYy#4clKp4mtpJd@}bdU+*%K_SX-#Z&fe!D#9qH8cB;ep6dm{#`w5>y*Q17eOUYg}%DM z<~acUA*P@$ZP^n~Oh8-Lqw`f=ilJ4Lor(J@r&tn2s}6~yOatz!L>-8 za>>scz=EoL<5+C1Oy~6gpIe-x`|8p9*!2#F3@lrL<<#th!ZOUC2o@U;+4t1$u{^qV zvwdbOk}wc9`nuLCZ-2ho1H9kby?@iaZ{bKCb^`A^x%Z3R`JG=LHyZ1Wp>fnFj z-e2S1|JA*BTj!Es**llV=LDl_#k*`t^zJ&>;!>%bB^u9( zjC_>m54wQCw}6B~y9q8+ zv3dwd+J~h(ml^7=OLM`5ULc8{l+B96C;K<#(bR#4^8cVb*j}ch{uk|sLBjam=K;o_ zw;%3)0)po4hl3dUf&DOI(tqE6cm@yGyCkgrf5U#bOc?hFG5(M3hkZnzSN(uI|G%*x zR$NdxxwNq#?%FS$RQF=hI-K=i>cj9x&un5poIwOT1p0dbw2A%j-41!6Q~K;qXFq)0+jV!d_QS#@rhB$02918&hBY3`-gzL; zIsMct=a|P)Lv`6f=p|(bISS}`XFB`gI%ZJsT!K<~=KnMM;k$jTBW>)5Em_;on~0(P z5S6YjupbWB^CtGg;|I|Foc%CBFoFG0t=|Rq!$3X%oc%Bz`WD&`S1!&|sN#)5D0JBm zKPd2!>AcqYg(&rAUNG~Q!QRud`%pn!`=JUf(ESF=Q+ffw1@^-~goSxQIBkx43QnGy z-CkG$G7HeT+d5J0A4O$^@1e%Oxk;n3*%K`uV9KVn8|fj&Y~U_YD&5(<6jko-eP z^7g|DMJX~}Z^|L@_c!}t50JFAAG%pvDlViv*k)0nzadNTAf{!=x%beV4<)TbMKIJ3i{!UpcB048`iOY?gph8t? zj>f53WAY1H+09hke?*{RSMVI23j*GDUN(%6HpD+e&D3R=lSNe;)(3jtJ_b`cX)pp? zI@L7n1voh~vrB+#c>|-|)t6nW=O=T|x%(#E`5X9`*pilt!pRXJP~PXMd-9iiGFcL4 z;xkt}xO3v~NQ@>)L;w;>D+2eVgEKEY69DuyfHgES9$q@3W5@D%d)Nk_uzmO`D`_Em zX@{ukrF|HE&L3Ij-nVn_bzYM9fj&7C$0+BIlWw9)%hpV)p`U3OBOs!JC@Y2$n!9 z4^-kHS0oJ&~j~Hmw1gq`By{unZO4WiX_KK#^_olW&GjR z71v*JCED~y!Loa?%LRvJGDrUex4rJO~0ohyO*mo)xU3rSs(Mcb>x>9Rg==_-LzQ6o08 zy1d&!ooIQhCdH5rcV%!O&vtn>k}jqwyw3@C^o}G?fUBwqq3wJCmBjn8i9M2>)&Xq& zmP9facXZ#GMSlG{N1QE{axL2zxVw9A7W+{$w4@`^v$yn$BNc8Pkc*hvKA5DnHR+Nk zIw@~k890ermc=p`a9hWQc9E-&P%VgGoCR~asz8XT3X%_4LCw`W8yuQU5{0_(g&)^$(y#)aJ9tAq}K3W+g*kDrIKZS zGX=u&shu4Y(1j4{duHEAQfo(?urAYfnX@H|VYky2?{BG*|5}VQA^p}xreA2HK<`KE zhtA*8`&dEmB|Q+%Ujxc~eXrH96{x4zUX`lX{;NcLa`RmcE1O;q29?hJF>akII)V<+ z*ZN~jwxx(PwBIDC!WkHi!x8|LG&iZ$s@jw{KejKEWa^W74@)4@{9I&2v=t=AWnI`F zw0*mwsFc~jWe;GMX4GUVPel5?(;KL?acOMh%VQceqNpQeOl|7>`LiiG?{6l2TnK^S z&H^Sl!Rz+k@lJqY2*XD-dVYhg#qg>Y8varc|(F?w}8VujVc^w^b*TZPE#8wC^C*mZhBY@HLzcqZ% z@lU$wGYC&g_qUNir-%HDEizdx%B|zP=$)ds9S^wNM(W`s9LiQUXFMLH227~&Me}Y4 z7rpwDU~qOQT(v&YziN2p4W69q+K0#|M=9Cc6g1nFH+l6>r~0tptzI|v?YIpl&qT3B z&JtchNnfWLEPkw2vmW053<{V0`3oC*giIHzRk2=+W0Cj|F%>&0k_WRUJp`S+vo(kk!^xNVp>Q!b*0XHpdoy)}f}DlrB}I2Y@im zWen(X-^Kvo!ss=Ni|aeY8OMV%9d?MNwt!R&u^L9QHyjSuAfnXGIqFEFtI*rR6&?pM2wcsPNr^-dL|? ze#Bs^=nVD*tfJgJtC9LrXtUff^6I#?0aNH6^wFectl{-MnXMa8u``3G+`p`^N(dy{rh z2fCvWcw-Vql8uKzrUU5oHH3R)r?zl9dze@NoMl(gf6qF#<2E^0g;x?BL|^<>HaJ~> zw5qd?N;j66#p@&!RgV0xS*w^yv^MYLC?w;8@KZJ%U(7E^>h0nCY2o|Ny!RP&jCZ;f zNoYOK_Vc70-lu1BlGNWwqDmi@EkP5t`Z|Rh*n_4E!`^pf2)3otvPkk_D#~6b=4lH& zD&%f_Jru{*nD=?Yb-GMNg$OD;68XAbLZZAl5aqkY)J;YC*6$SoFDtneulDO`r0&Qv zZ~Bf-BYsaqZ7W=E%D;VkS5KME`@XbQ&;|CZ$tGxQ3-A~KrfSsGvUnu^lLPx=JK+gU z2a||Jh$}5*=9qi}cE?j}+lr+xz%@9;ZUIe9;UiaEO6PFf=Bn5WzSB7$bchwN&gq-w z&EqH>blVg0Om!u!Xs4rRPAbV$hMD7%zkFaU#R^q>WcrAXIEUyVmXQKI zq=Wk|=fKw1WoEk^O=fm$LlYgOH(BWk6*UYQ-TqFz6fc(iYhH9kJROVXcZcN+RU5K) zV(I&}!n;^lo^eEy4m?!=k&B-y@9J#ktvk{!KZ-#8f7U11(naF3scz(-;3^s+<3p5XjjV&1#;e zY0L*iHInQEBn5rl3F5H38F2ok^wZ2Ab9!dapBO$npQGje>_tMYNQwU;6ozR9e0lwN z(Lamd%do!Z+o--vN~8YN^ruiAH8Ej`#Zt@1nYNMI?Exv}^y0 zgRO$8dccSq!Vrz7mL{7ooiwn|lhLOBJL3#3kS&wne}JAjoVYW&gh~8Vlj2U+Oy#;t zOqIWm6Hz;r>tuLzfz(+faUJxp)sAX;`+*)c&rHEDOx{BmRv$d~U zNlNOvxT)Ih?bhDQBY0zbyk{cGUSFO9gLgYC@|m}X0JgFRtTt=)kRBn$9-u~NH7Uo3 z>LzuT!LIeb*p`B4^AN79Lmd3ifIikFqmNE3#L@wMX7KQH^m$r<{r7wOE*Uhh@*r+H zV$m{PO3^BN5rWE|T*@weQQjHnZ(5^7>y_SdG)!O?Kq-(v^k}o{rF=M^Ujj!8J$Y*0*OoyHGUwNf{G2_Q1JPOiba+wuM;PEyeSk<|GJz> zv{R5hs2cs!G?3Ot7l4cW&St1JfRgt!?frdve^uf8W9&UNBfoS0y%TzCdarX`(-nO? z$68N41>d(U_}&YWnLiY5I>qoxl>F`Tc%x1A_8zTLPdVLpOgwIZO3TS+ce1IQHNOyi`$+XBa@>GH|Hb2>ky7Gktp{KnTE9}@iL7t zZMnQCHqrIeSNzVZDS=g?Ejnw?)dx2;uyGaYSxL9O;E(dWsHUMfYL*B^x9SL4u;Yyofr1|PN#VI!%s!PgIyEmQw1+J1@J9^ALC6e^g7q{zL%Tr- zwO`Qzv~PzZDaWx8UWZC6I6RvukMROM2$3$(T1Xviz`3t39})f-tsmZRE_6Idyh=Qa z?9L+yXXLM8&fHsGMg6fUx~8Bga@DOMC1IozgAq08E@{<1GB#ynS7F6`j#-tX4tf?p z!&!T)I=F!uPhUBe!jkiZ(rv{@o-mf&NGnJ}c1d^ta4IRVuNs?`Fj8A8@{2y2 z;ogFN-ZtkTe*1Em#SR8%lx-!)6X?x~?Fey-IHsG1a(p6UmcD?=p=WGal{-w#C*xdA zdUPof1@DPpJFHN2>fN-)0#FuGby`|#xffBPcRPwMjXDv-i9n{Mbl(6)EIk_TQH#Rs z?!LTT=`TT!Tqe$9^qhqN7bN~tC2QO$RKSmc|{gLJs zVtvbzH-~k;o^y1`(ID(`px6f=8u)xt>~q<8;XQP=DfUih}s zBjj4G>k&8$$vBGKyAPDng$E&<(FM;^k$*25Q1lAMq@A-CIYtAmV~&nYl9ZAgZi1d* zL}W&mdIJ!pn)GpHyy#6#c=BmDG@OWJi4U|2Zg8J_EOT+U>db{qWE_bR&1w}|AkIEk zlzW_r9jd%Kwc4(o{nSWP(_5sOI3(6zlzB%t9aqITqa%v+_Oi^S{s~gr;e2XsdCUkk zMs4Yigiaom?oe(?lZX@+i7Db)EVXYrs};qf1CzRP7k&b*G1?%fAf%w&1WO!g}DKfnbFFB#zj z#H{&qKumu$hzj%_#GkH%g*qD4n;jgMEq`gQzcH;}$#Es!da*ZLXpF#yy}o&>71Hn2yue(f-~6Jz<*5UwRyhG!*Sod3@0YYthdBdG@B7@sX*# zbO+SKx3B@yCN>a6ZgYRf7|BkMe`dQIU`nQ9GzAI z@Cpxky7$zpzK-sK@22N&?%CT~4?nhnU)PRT5Aw?U3m-SNM~-7E>#n9Lt8~A2IrGcD zhwF=r#+~e)cbTYQX2>39hD5Z9dG#?W-FbagGl%8 z1Ch?hpd>4x>=qJ8$saq5YM@9hknHiR(jW7uOAx&5qo8VeXw&w#&40Agrs{`3SJAdp zwbEyJ6Cp4C>qJHWEH@-jSX#~s3VUYjmSgLND|7bgEst1|mk6krw<*$Vgq5NI< zC!@AU0ZHBis_)1p=BT)Z4`mRD${zLliEc(t=D5{XYb6H&r zA~2Qnd(rEiM+o9)=sSh#+R%4Z>xNC~J4W(hi&g=Bci5P|H~fm4x`1r6^iA_2r0;L8 zHTq7afap7<=;!DgS7wL611R(6kPB7w1-3pxZ_5xA?zI9>$qT{?x~oA4$UEL>_$FQu z7f4F%+eQ|&J1rlDXyl2AWNz{GaATs(hk|fK{ecun*D?f;fffqcG}rHGE#fFGJ_9dT zdJk^c(CVMc1FoT-7sL3LC$p#git)|1q&~RA-EcDIeeMSQ0Ak+Whg_E2P7FqU(QXh?w4T__5JPbD^^zsIMv; zr?dMUNM~262yrQ_yC5=|hD2=&JH74wQF21hPo(GcGy9$hGMD+@5#f01G$Py)M5?~I zhVEr5hOsj+j9@7f%NOw8F6s#8H=~#NXb=pIN`Qy^COt_^KG^g(TA3G#f2hq;mE3tH zDX6+Y{2pwpwfq>ksVp2K29s%jX}6r;sFF;arQV;Ru#8Achpf+Ge}^I-kIu~A63B;= znyzLSAV`IibZjP*qzol0=`)M&mlk4Mf< zm|^TK#LtDJ26F0`{@0}EG=L7@gIt8v;uQ-`dZ%kZ-X>snIv+V0Zx_ErTVG+Ed9RB5 z7xc)S(AG&T%rGXoHV5<&iaV`%u{e@TC&sLbJwk8J343FCj>B~h)1w#KGD`hr**Ci8 zX6ccvI?ekS?8xyJNE;a?y(dm~d?`epA0Kmmpkr;S&fAyX)^x=z)T3dZ@`(}u0=^~b z6hXIGH}XibMP8;oWKM(I;(e9}RRZ+;4w1v}+IjG5bjJob3my z&DuvB>x0uiR=K=BSO&NA`rs~}OoH7O*|Pdm3bjL6s{W`=^}^x*LNBl{Y;$_SDIHJg zzgr%V9t`IX>4(?%g&@KF(VhUE_uIOS^@E#8Udq{p=BCs~8yT2YaaX}Z78Ouy(1~fELcp(w0}Gnsa+nq zxmhtk7969;!_UdQuE|tw!6ZK{BfyGBy6TM)!ZCV1hr{c#d$R3VM;$isdEVA;tS;Ua z0`0_fqJ@Zu%hlF`)BbJfpiF@b7!K^mcx0`UnfEjNo9y zQOXH2KsiBoP2X9Q<#&`!ufw;(4-tW5?Fw#<4u5s|4_PB_lH z`2OIS&F2d2&;n-JV11@fv!Mf-Wd|WANNg?)F4|R$Wm4^?3>Am#BoG@ezbMUufE{%o zM28{)U%ZI~oXU%u3{vSm`;d-E*p{?w0296oYz9i$6Y-&Z%U$jfYkV9pFQ3h%TWxBU zYxyt0?)~%cLCdcXaDb8QAAhi?%X9feXnq@vh1oyAxXxi*@CF#q4l%m(z$7-e>>tV} zqPWWt@73LdD(?$k)v=NA)<3W^HES`yPPAXmrHje^#MM5@vyti==G+l>a_KIf^1UqJ zj}9y4^M@eVV$MEl(5v?a^_@z6!bF2G4vtpsO!i_d5)ozyQIy-I4|$Yd8>J5!ko&mE zKDJ38^4r|UXY6B}^dZVu?$EwQ4`@LBP8%JsIv@w}4iI?W{x6BFFi4#U6UC^Kywvfd zuYL^SM{oUz@uR1HRPm!nFrxeNn<$mU=231nM`@bkx{7FoCYN>SWTX#6uf z{PrrmfFM&z#nqAEkmZAz(5QsH)D+9Zu|L1?5th^E)3QG?18|P^2?A09mUUNJn~$M9 zb4)#@3(nDgV92_*=#QBgzXwb7)a)lhGu*!dG>YS9cToQ>yTesa!LN07h<%*&CS7S_hJaA zT}68v7;92OcXbYITVB(lU0p+taSb_xh6Ic_KWQBJnuTCwXi;Yv(II4S=Q?a~hT|Ff zV~qG73X?Bmtr&5#zlObm0h*qmq5Kre!_V8nR&Z=~8;54c9GVA(=9KJe(468wkjL_2 z!m#vrScVHrKI_KQ*2J!_=#MpKELcv>wx}(`{ByzL4Wirm@t^bG?dnG^3vFN^7ex}) zroevU(A5uL_amPRN1`DM;wP@25 zRO>1lcOw$(9i&FhoXO(klT6Y?Oa9bdPrM9{_w&XfxZh4V$UDVuA!|88Etxvu!n z*qds%6{J&D%XQvcWEZq3-OPaAPg363WJ9$s6u&$t36Ugwf7tW$w_IcV%LJLJ{I(s0 zKObD8Dx0ymVar>^BWi!#^JvhUrkIp}2^fOxJ%SLnJQl{A$VqNnS7qi5H#29CPQM3` z75daS!I7v@r8>82&a6I$+iyRq zkK}LF!QrpMTv7aa*DyPD%lmP)-m1@eekFKL?>FUj$x+40FNJcH zk6-9EUN4Ho5l(oqp&)({?cb$5GUIzb2a>dg2nI8+*9G95Bq=#`E_!~R7P+rg?`8kK zY-Cs&U2x^@RPpy+0!gYr8y;Sdcf){sac4~2QrN(nw|6KbB$l4&ZopEa(ggk<(#Kj- zdD!W>u)Ed&g!iL@``KI4p*(s&`a!4Nd?Y$}dNsq*!8-*>uy}<+n}Nu!@rFutEGisH zGMZbX3w}>~EqF&muPQ>=+EGx#hC*y@dCzO)QNs2L!gjzF>PUrdK63>na)(2GUy=#H z5f0$|E+TzjZ!bQ%PV`VG^4fG%Zhv(=^{PAOocd0hb@Z9BbO*~KCq-6=>|J#?lqHK~ zBdWR2n%3(GwGrsD%{z&eB6@nKzN(e|mzbM1>GR4gniZ!wan_PU(I$3`ps{_sXk;5~ z$uPZm6@_iZe2D!3K4u=VoPy-zyyH|the%?W>TCRoi#X!$7k9uM6a2yvPQz4qJ5hhy zI>LB0U6Z`Vp(!FYcgeAn1zB;=7JAkBxt-KzMLxfVz$a(>;d`Al&*fw5Jg2)rD`##C zJGNzys*ROMVh$d%?nObd*WnU7Iz^IeDN5LCbS|hBTujxVep%D6Qp}3xY`eFa!gq(s z_6FiRtQDbqdzXKz*=re==7EeGy_VT{Ck)hgoi1hL9`(l?SISErS^zX90CG<8LV`B} zk|#7{3rfg$>n(SvZ_97;5`caPP5XhNX+KbYYb_4Sq#p3mOnOpT+Vwdl(Qqdjg4Ga%SygA@tLjU617IA?+$4+&AH%IX(Ykyr+tfCs~ySrp<=E09Oz1&3sAnr zI9mYNNx|*J9L1B2_w+s#=SFhkPmg4+>#`!wE&|7lHR2eH1SGgGL!xxO{7@1@pH1ic zJlV1f^Mo2TeV%y6e%`)=QXRgI_p2?7Og|J58t`nlnvttxjf;xoP)3$mt0Bp?cgO`u;} zs1h{Y&4+xG{R7@fK_e2+@RZ$~Q8{lSBhcRmt9fP^rc75Hg1DlOO&XqnKgy}_ghe7W zzM<|Lmx{VaK;5GW3)M0X?d;&;_Haa5ys;f;=8-t<|4*EWJaL%n)E6{pIZ+s%kC7EP zIx4SF$Cx0m&Rw|EgeOsi(?eP|GDe*vA%U+N;&;fjHxnpv89(Dn{oB9f5?aI+fxIx8 z)aBZwZkKB}E|QyNnY`&tMuM-xgd{dY5vDmnf6+5Se?o`$S2SzKx(<9S^vGD{m0LXliIwy z*f#H8j{t-L%&x5FkRUKupJ&2Xa3SpoKb!5)PCY-1J@{5P!X~8#%w3OF9fIa zX8x34GMX0NfIQjJsb;r7I9ZFl=lnVEgMdn$T8Fbb?#*$O#A*s5UwRa}uX$v~s%9~l zt8?ub`Cj-)-rY!xnKILHY6CNvp)1?Ln+|4wymNM)y>77wkN70jt6o}?M9iR849_a!HVi^5T5Cq*f{5|Kfm5Q5R9G~ih z;&C#>2||;hRsK!HDMI-YuV3dNj?eO>lOyhb(Q~nTCY;73%jn$2A|?y~>842X5o$2~ z#8FG{Its)XK&Ae-nhng}OqYB=9=4||c7UOMUTmF7pqbK3&1uZfZ_>JMdvdVreQOhg ziZ0Knu+D7nz=;*4dFt*cnMk6X{xFWee44SZ&|!>G?zR&?NI~r=>m4WVUnSj6@_c4f zDemX^R-LJ$#a!fJS8;ZEf>hgGI3L|yT+?sSxR#I}An2~LJz%HXYLKp&Nn12QjrM*) zN6|tyW>gO2AjLdqRpAYcU4xD+BWCsnke(y#S+K(tX{fHYZxDM84+^Z<+ge-%y zQk4Ulue2hW$Vdq3Ko6CfK^e_f=v;ReYz8z?R{nE!v&#+fwXN|!ujxKfvE9vl=O&%0W_eV`2#kWc|GxoG{8RPiY3tyR)x9C$2i?ZRD^XcvEPMChL>U=thH9p)h z$4-lOe<4=94yPoL@cY*|3BMPg&cBU^K%aT{NMxO*oVdw`!7}e}k_Tx=EG4dx4hF}C zDtbN-ZvW&?ed-zMOnl57Gh_&7Dn27pf?^-ShgkY33>?{gKR^V3H>&h{gzShPy5!!F$KgrL@G&;>>l8P`bokCl)QfrahuES|+sh6?LQ`Ej#u-!^&+H?6 zZd{B1cV;qY2eh?L{AtD}qvK~@9ewnV%C-Ae*HJU9Yhe)mbMe?%XfID+0WdxM+j1j` zLGE4%IV1;pryyNwTpxN8x!s#lo|qci;lo(+{{Z#Uj7W4Nb)Juv@6j`Wo(xz_4aVQSYr6^hA7~F2|qc+Umf5-EQf!p@Xt5==Ypc;FQNW}MiQ!0Z^@g%(D2V@+`z;H zMNE~oonyTl0o0-8YXqk86gh?DdaTs(w}Hj-vBb;UQ@dQxD)bl(nD7k!mafBsshi^bN&ft z;9Lg^&Mdo@Brbu!qM^Ifp1tPQGS_j;Aa5;qCb_6-LnT|ue82|HMgo=UyZg|pSl6?&e)Gisy1v6Ye%24)C+7U?}W1le~ zygoK{Z~^_7?zS9|Ob3Zhb{(<5hMKeewI9pmsQwBDugPt6;q9uv9mMdq=BSGqm^Mh0 zpTjnd@!QGU=D#E5nywhKP@Svn1#$+^$=~M((8HiXu|*d?Abd5#H-GEg0Qw8X{do-J zJ}>%dH<+C6ITGZ~s6E%_R$se?Z5T%vP7}&Z*Sn3NC3}oDqIce!U=5|Au;_wjiEahb&jGR(iMMM z1i#W}Go2ASsY(5=w6@=;k;G$C=jqN*0_?KJDJ{U@Qr5~7Sdb?p015U?9?Rco1JgfO z^W4dl&&7fIIiH`3VX&NXLRloCbWAnrvxZRF4b7~}_WPEkaFpB(;?-0u#6EvR#7%j` zFSbFPd`CJ7F=cZcS3c`@^=qGy=Nh@TxhnC5&HxeaNUAH*$fLB9|Ht=8txK(L_S!Z3 z?Hb?j*!V%mzRNko4oKCSWj(lmhTS6c;oK?<*?C1re3` zf4-;Qx0eC$&CT=tm*1b~VfwAAQ>V65=bSoqs!Anru4!OH+oD+8n!1Ka{d1gGs9XOO ziEWm6ENK+8T4^uv%v|L0rFLi}Nvb`{#70y9KlD{KLJs~bk$2CL$oM(tn;JQB>h{P)OYHE!wAhJ}2;L>xR!FN!`n!GVI<38Sx*4a?P$8<<`2yb0iOkU?!dj z7JVf2SX6y#!;e=`7yl28oYS|cPfHo(klfo=nE9$4ldDSnILbbZvZ1AG^R@YCY*?F? zt*y2Hqy(!0vK*7|K*~_X?t4j$yU#Fksv;@vbj;RmUfK0b8x-6>Z_-bn?!8d7S`O4C zDm3Gt1-R2Xb)QXW%9mT=Oexd_PD`fW1f+BYr1Tl2#KJ8gr6nSzO_0*T=rPm~#t120 zS6QFxNNs|a>N-9(Vp`p+ZZQ2@4pek~M`a{=JjIUW{?(Wxu7wI_MhtAoT;XVI_-B#F zH?(!47VBD-woYz_?M3fLIm%+>vmugP$ov-h#H%44`Xr>Do9Sb^rkb8~L}Vj%JJ1>_ z9ZL`)Jk75RYF|XI!%nH~pMjAbY&U4+VEUtuht3j3X+`k9G zu%C3}`J3%0$%fozKWP!bTij2IOiIxY+EW@N3X*X9Tp!fCSw|&IeeM7xTi1{NN{*+h zB%+h`HuZV!i#heVx371`T>ZV5iT7J_VNv)%O%-j6~2 zqf<^;8h_%|z`DlB@YVjk!kK&Dv0x$%g&tJQsVezD2sr(5jpsdYK&9%fZEZX2*@2wFl33l5KqFS?U{0>tkW}wo+OZtBZ0kuPynmEg8$=a1(Us?i3 zZNbD?I&X~W0owtl#lmYZK*6&jPf!*$?5nakN8w;LZg4Pv2gX>9|FZR6f`&7_gS#I% zpAmJ3w9S#BXuFN`)7}H*wrPg~5JeyAr?4vbAhb*zHWzfEO*AZAOx#F9!F5FP#IwPUze`?7W3+T##B7 zN!;%u<`Ur^;Nu3-@OlUNn>D5{DjT#?=iFoIGb_9ksTGs+Ly+0D)9ns!v-fhFUGFkZ z=B&Qh8vv-ioGoYd!mZvyclC40Wt!)BH5<8THdU5$E_Rw??GDStR;mo0m>oHkF`kOu z(X`Q)KI)aB&%xTwo|x$~o9)!uA0hYZxsx?Gyj6_U-7^y9WT^1cC~X+xKW|KZZgE?-V8wc33B)IaSUa8hNTw`A8o#SbRW+CMq|(a4=l zgE}4AUW;9HHJ39SVHl#?AX@CVTjmn)3n+)M=45gSRfhrGIog_18UJZf!bD3z7wQ%7Ta<7a z3B$P^WYXgYXnxJD3Yt@PpnMRdxO~SmkGHALB#v@zJz)@Bw(YyE;@2v&*+ousk=^6m z7dN*`_m9&nx4Xz5aai!&s&OvzKV4*L{BT81aFH1o*)u*sk*zNBP8ZpW=g5hisK{A# zC3n%RVG%IsX{n7ZrEIA2Sv$WjGIepL{*qx6;T+N0w<5Q0#bPirNiMCy=dEe-7wFmT}e!h)D%}xrr%fWJt4^ER!svo+eyH? zcQJgm_N{1S{w1OI}J@Y43Fw{CJoyi)Bc6I=^nMg9KYUS_Rk^@96eHyn8ec)~#x}d^)iW(!CPa$)GHik>eQf)3-kJCC;qdIaePNp{=nwo_KSOuL3(&iFFD(Q+y(Fs%uYKVr z0`GG?IMb&OKx}sc_xY#Fi`L`bTc~G1P6687V-b%Mlm(jF9|wZ`hDFZ(ulTaeRz{7U zN-Sy@WiZC`HyvTpXOQ%JSiF-ylWxLtJ?QD6{#iTUN1Tp;`RAcB|B2aWLP5_a|cMY>Z=E*%#G=xs%u77IM3Ww-5sN4Ad^P)Kr zNo)#{IEWDK6`dWEP-1G(h*rX6Qb1=yo!6h=f(jLt`fd=*0Vi+Chl{ zy0uy$(%6}sq1)ilZM44QfZl%w=%gN~vErNoI`o(ToqQvNu46NFC4e)gyIAdd#Yd=S z69ZJ@xdAF^7_Q%R2u7%uZicGNp(+8DG{hzVkT+E^`<-I+WNXQFdk7bIszx4O5bO4t zcKIh=ZOwtEu)C3KiqVuV@3~XCby$9u<@!jumd7NNMv(e%k>^NJjPI3-ay;BMMps?eY_e9in?aZN#HHo=#%Nxmb8oUY$mP8F#Qyb)lGARIJf z0OTDT=IvLISBIk}joHZxE*dnO?c^F4=6Yv0fansHXu1BXh%SR>lbT!;!d%n4=K6Iw z)CGfPbC+DLVXn)&=DNEwD63%5Y>JX=Vwmf&uDPxWa|MHDvydF^VUBIO<~Tmg5e%A5 zHgen<=2(GDEb4{N+%U(w%YUu*n=3dq_*vxUC*a09##;ed+Oj42HC*Y7`p9Ju*dnby zb9JXeQ*A=(3!MhS(ATZD{LmLYqPWOqb8Vj1M+Q7lRmr3xW`@lsJ{~esCuwSxtmVW! zU_{AB!ej$UQ{1I@w4)AukpV1l9OzWz(tu8>5<}$U)++HH^4wb01Pm8MG)D%^sA}b# zNC=RR$bg5c+U@s&s%iF{sCvYHr&e{?@06-#_Iqp9Dt@JX?XU}Sam7)MY zi?B^^DU@$h&-jU%@!u3@m{pYF!Qu?P;(KStZz#?%Q6RNp3BMx5U{9?oXR!HztlY;# zCgq8lVaowgRi#D*(g{FOeH^G$!bOtmdc!u36cIA3t*u%)mr zcPVqL9ad8ZMt)YpGK+X1AiswK@|zKm-`pGZ;LXu7iWUtrdlQlE}!YDOTtoG#uRh_ddp=746zje*X4i@ zE&%54fg=qVLMs5?9wKwyo7kIVvjeg*TsDHOUc!y(2TYdXSjcXx#7^c`C)6@CjK_7x z<)`vK*I+m!P9y098T7^syayKLX}>*sYV` z`(&oGR%$(x9H*FLW(9`xMkHXc9{CFWJJjE0hm0g!v}aIc*RsU*19tm*%vYGN>5LDWto17w=ipAg`=7J zs!e7LbEg;X%$#7xpC*S>#vl8{dScmF<0zZrEsP0CVWIh6rZc>sMarNt>rd1F9?f^4 zf#MqjG-m$!H_&_w8sIHBV@i8G!x`G~a-xXZ&iRFbmMXfnozF zdc_9|g_(f<&_CLqlp2Njrr#^xdd6VSL^L|_7% zkc$XRKvGB?j=%&YwN?><38{6OfV$O+X4qF!W60H)jHR z!~%f{sKas;nt%+wnSku8zy!1mSZ4yd`!QzchEFtG>#0n7=r_M(U&pGOsd>m_ica_- zn4(+%lYNKNSTE+++uGmQNjwTKrphwy7r6VWtLSxq9xJZG{fkKQs7lyWYTcZb%x5>X zy^kKH{2v1zmVcGXr+VLgiglT;98sw{{Yl6XdY| zdiuBIhe;{_HOe0g^FO8hy2&zMU-3V|!`}qoDENvH{zJiU)ZT2~o{`~PrHzKy&5mg- z@~6t+kt<)zna_Bm(Z7Vd5k}v zxU+k?`aLB02_gKufm8$X&p_3OqXfqL+W%TBqW_kU?e=`Gc8cUNjaKoy1O){Ksm~(?hl#jF14u{a6o66re2`B&ozx*m1%VlQ%rN$ z&QGP(wsvBroK3S|RtfeyBhZjA8(DaYX-JX8hq%#bO(Ipj5qfDDgV)R4MaqP#KAoS~ zkXsjxQ=a7A3L!oQ>NoQ6KN%xap8Anb!UlVM+uT=zte05U8LzmkY>Js4^osJDw*D@? zBGFQmNyj%(I)Y3bkSxrEDAA)!nG;Z+3QOu+5`sg{OPLc;o(eO)Ah29X z9mSat6B=L%iK0w*6=g~nXF`eE)-s_)O8^uC56J-!DgZ8v zBrx~_{B;rVc4%C#rxLf3JaWwIN7Mb%=h@b}o^cI#gX9<4IA&Qv>e)8xP3Guu8>u75 zyi|}n%%yJPY)Aac;-qSq^u2iX8O2F`T+(-K8@k7%#YvxInXbcP{nrs_1b63(Jr}zZLNnIpv6Pz1^Qv6)S z$u2?MDvRsE1_*I=F76|XD~)rN!(6xJ5t;1bddBf~a_b%PK4);j4xj7--Hee$CJ&+R z=zO^yzLyYsg*$vwUBy9SV>lJ_d_$&RN24x*|21o{2Hk+%5%ROf$iss#A(4q|AkS1@&{7eZCjeg{PisIO|$G+qjRG)TSp$n8$e zLZXwXi?vZA&)aGp^}tnWp!Wfr{5n!K(1fNoQC0!to%ztFPUC?pu)1LkS9^nk_m(um zDK0Cof2BE=Iq{WII+hU|@Hzfmu{!9L+ZlBxV_C~ORYRM`dOEimGvZ_9wBfs)x+!vO zH{Rt%RhdqC`X`n!NsjkQ92X>tZuL)t8CSxDAYrD9C!q)T$T3o_LjaYDwJoe z%tgKG8qJ*2S;&=E|wLC<)9BNfQJ3cU;^%9VNt;UTS?b~dYWn#ET~U9LHEw%z8S2iQyUvI zjaB2k>u~@Y9UWztqb-E+c|+k0UBqzNxmC^lol(^a5LMJ&5%zW$F}13Mp%->d4Z~h;5zg8f z>5CpiLZq+T{)+TPkFoGnHx0;GLSOhdepIY)4y~OBW1BJE`Sw+!oBCgA2^H|C?b#%; z30ViSaI!NS2@yTjS!mT%HAGXnl1gdflloAg`b`PVVO{38W?&uQx!G(Otrci#MH60Z zq}hS~-!;$0^&X)Jl)GoO6(D-r>M63BX$od~^t|p0M4X=L7Ji4*c){e4>F548datjuL0aF0e0i;E@2l-N5w- zoYlR_z)R!fRgo1A^aE`LQtvwr^fiUl%uxo~GaeJ@DhE0%0G(!_4~C%42HFc(2tYjt zI!TFi-gE!_wQT{MaCl6bzn_*#(X~9a)A$LsOQ63 z-}wkF?#^T%n&L$v*5;go|KD5SwZoTc`B**RtgGB>s1Qq-fz+Iya0d4-V?E4rgkxQ! zkoxS0#=2hs-fErEGX$?AxTUfFaINaY{*8gZu8^?*&{#h%0J_?Z_4E*YOJki5FuSq7 zHU!<$ST_ftZmf?FLANy4HA>8l^?wkuxm*sTvAJC7KCp+o53JLCXizI@p~2R<6ztWO z;>NwexXyNvC4{R)Sh>sbfEh_c)gWLw45dqDwgvc9Z>vmefM=YGz+!F@Q$qEC9hxAE z^=FQb{`-ZZws=$f!Bq1MV-JN28AhTD5pD7v_yil~&lLLai0H)tyw$+xhv0Ptw?stK z0&qt}w}s$8L`1(705s=_XiNycB_bLTV0J__I0W4i5$zIyPP01q2|+a&(kBZU#%Gv> z^F;JMA-M-sFcxMKKb3vMg7rc}rU#3Kj>t_{;qlYX&TDxC>w|{cj?2FY`HYM{d*8>g zSQ&%f(zc@vI;;Jy=E5v)H$Vzx43p<=lsuSV(sMgLiF~{FFEppHRL zZ)u^q7inD=n)_K?@j_EK38@K%3(Zv)SG>@4am5SG1qQc;h2|41rL@reCU7OyLNk*2 zGZIB>Ht8&$-(ZK#6WtgeMV8Yf?-duBydKDTOO8N?oO_`5Af9+rH1V20=N(5IW1$h9 z3-JzucsPI}#-u)x^ssfDjrMV<#ZofmP9T#}>Wr#NJwMI*l4md@M zbuNb!Q*Y_fDw$ZrH}vh5JXJ3 z2$Y|SAmR~=V1?2vh>+V#+czve){DD@u{3?k%o;;$eedjEx~yg3EX?#mj2 z*MV`bLqs`wy3c!~+@U{TFonXsVhPlZw(?K@`peqD=)fuXU*m=wG z1{Sb#j70VABM)kAXGw2^)_j4hq0L1Jk<8>3xZvNzhcl(pJPKCuPuqj!q|D zG4gd@gn33Y=|DCnn9pqFDLwQWe7)Ff@U^_x;A{SUN-&p%u%NoDCbbPA6!qvXSf5*n8^iTWQfsYM;gSt8J(Qzld;Vy)0EETNBBM&!L zHQQ{;u!o`O>7anZcs$WoPC9F-Xsx3ydYt6r6^fFCwWtXu7ZugvqHe8fL`n+05-1B4ezd1tOBym0k_=~9tdPrNU%w#( zDxu~6Pe3pWepTW>2+hrc__!s7uR-hm9oVg#h5RY;+g-#~FA)K;l=#<+K5@tsU)8-! z=6vhlBn(hvi9g!X<)jrX&~$5KrZ?{)BuxFHX8s`v#D>%hej7TiC~cS9w@hjOv-H_> zb^)P%a7O{5oers;X_PjLb~<|ao~k3aLWwHFZcdc?Cj%CEP)vhxa!T2+3CzaR`Fj5{ zsw=rYucyiOT_oFA(lPV079OPVvxHd~u&|(iLeqxZw{pmX)o8G^aAqAcUY!4?&k zAd6s`0~Hv`W+M0qY%_&>R+2+n=Ze)E=roJS`JV;m8z5Rkh*bvRmbZrVGmF4m$U)2q z?3zw|33&$zs-Wb77Ramgo7fo{1UXI~$U4oxfXzM5qn^%q(zlR6px9VPbBEPAHV(fb zW2nIl>X2TO({s=hxHj!s4j0y^zQ=Hm){Q=s@_7Z5S4Qlu#j~=Ea(6cDAlSxQTwYq< zG%W^gp*oschgM$hJ#!lbMd5X{DOB@A{a>zjY!NgBD*w&feJO%=p1M-<4-cqFYX$E= zr#SkmB%nrc{PDUItPzhv>|rBvL?tz6&`N3#mjzdWnu9jRW0ecLdB2;NuRa%N25Jtq zF7x_PYyS^8sCYa7n)(A>z>_1%;cS}vWB4Nx=wE|AWW3)m6DNJTiyWAPj%gd6$GUkrhBbaadF8q!iMo!b|J8Y=yd83gYV^31jeN-}*uT8v9XH_+KJ ziTkmFM(2u8c(H#nCDs||@b+z|ZTC@J;MZX14^uD9VsouT7Xmlv2qL#s^Ez|2rV5)! zTtIq_-i58N8d%Q);IN`|i4_2GH#tv^q|q$u%Ex%krf<=~JQC2p>Z z>lr_bxDFThcNfzL&6DQe8oP;#xY#raro>4)YTWBpwEr_J9Ax$J4 zt$phH)vUX@{?Z$zfuqy8S8PHwGXfI$B$nx6n{csIkE*ph0C#k%em|~cU0l{UWZ$Yt z;v~B5==3%FlzYE`OteeK!Sj`Nm`3*`N0O6~fc{ndnO#PS1^yJ=xBO$%LUx`@P3#Jw zYUowDu%S1adH=+!W_wnMh%>6jas6_SDzmS*3YD0+nnN`A%n*d_x_H>Fi$Afdl6a?o z@PQr4#h+0%kl@s+RW5jLRUN?xY%c(87hBm6nOUD;ysDYMZ1M5eX)t`SQ|0oyy#-?2 zo&p~aRdtYLqMFVrIKp!hvy3A=BFEyZmeu!fLC@h?EDjtoWuZZtM+P>gCyev@Sh5aS zbwmA@T-v5c`$ylFSN?x&m zCTnzH!n7CCkq*Ys6+NievcNcXE!5uzBjrM-(uK+%rTy1LKWO1i0cKDQHboVrK< zq8FYrTJ4-sRYtS^KmQ|heTSNkh>OX+ zIli)Ud`0K@^3L&Pod-b+C5(~x_aaoTle-W|n#;yT54%EVJN9zo3n-Gp|#Fm-OTku1B-r+~;olQ!+ zlfozS>EfMy9zodY0f+IWIXHv7{{9fE5dBGk9SJzms;7sYKrI%sniSFO12`DEsevCZ zWZdU-{5)rWL+81B9FBZ~4mpWab-A`glJA>f?)0k>zCpdP3zqnQQ+(>55NC6=&BqG* zJh71Lga-VbQ;Fv^Jgl91JQK|vi^Hu%*n^7NJQY9MO$f5gmQ!($-PE0}s?GD^@w%x; z{M0R^;KaH~ehr)F!7p`F&-jlwPdOQP(@nj2njS|Ze0)`ViQ~ytXlecx{3)2sTb{@B z80;8RIOip@3>@Ae8lQu;C{F*ZDiHKs)WAWq6b30#bu@b$!{T2G2X_4%&9*DzOd>SG zizkAii9j?vh4?Mti8qNv_xgqrrTjCAZ8M{41sCsMS zI&$g|^)w)2wXa2fjphHHXylHL`mH-+wacRx@kZp1h0(27)bB~u>yckCXsmtLfhVsu|BoD zQMY5`GNW$OwW*o@2QkN^ZBLJC@{Zy9Lht+(Z#SGOVVC>`T>u-y03+zsI=-jawzo{l zqFy3!x*?GdoNe3(d+zQ7pBg^YxBwQP8U{&?SmiP&s>+G5A}TEf{{xqT8-Po39ur!p zmW1Ur8R$b*nh@1&JUsKK;yv1^Q#g*?FM5$Q=t}wNKSWe!XPt zja*paXs<4E$C9l#Bo;&xhmti%X!{Xhba!A-&yQTuA!1`;K+H}djYS6FS|UO_o7l4; zDwfuKoz0gkQRLDr8WYW23O!wHG znC{`{W0XCF44ilYaB%u#99+4QD}l3*W_ut5xM>cKCCuIqu0n7qrcwJC3mhNLDGq!r zX}&e~I-*i=1A()TalrB6`Uf~ny1HD7`eCWis}t#{eM|t34^Az+a^cG6(vTi8P;hm? z@sX%%B^glr?%*4g*npi&!-&BGg{4LLV8`Bp+V@hvo!@+W_5)F$$jWTDJp1+pC^JJp zei-t6mm9OWx!3$b+;Y(R8Pj4r7~E*k=afoEZ{r$b{p&g!IMa%3)aZ2J=;-&+257ML zuj}Z*R2kxH29A!lH}!aLRIP9w4V+|C2saiuI{G$;ub`uW6a9s7Ha^FVP5@>x~QtodfC4K^I*7M zch9`v@bOIe!4C7@OTfcjHTKz*Q|Dl-99Nd^;8XELx|1=Q-U0_r^?77j0xP-_Y# z)K0LT9OLLsfa(1IKMA!uT;&83YBYD#BB2I1d4FcF!&}7o1rn-(E->-2jFEQl6%)+K zmz+4sNe?GAA_IDB)$Sw)AEC&A?-Fu?gAeCLWbBrZlOKG90_0pIooyEvu!}aePW+{)hD}=09Wv;!KnB^p zvNtRerRLvx&&i+FTarKT{hua(R{v}A=Sjf+HTiS9lNSYSky*M0`Qw;uAzK8l8Rib7 zER;XP|3&$;n}aK0i{RUW{Q2r%lt0fqxB|BLgYrjrQNn2p*y5Jt&ow}u-=0m1@~(m4 z0{QbLtQ+|=<pmEmp|(Df;%l)F1@Pd z(o*I)*FFBEuWlR4p((P*V^wSD(JNLh?S^*4f!|qnEsfj?wa_H`R_lDbn>Xn9|w#xM-M2sa*U_b3d9; zgf##7ndp96?dOUK(atNz@t^myu4v}}DE>F`KgRz${txE=K>kj5KwfUjrFx81axr;|0!91Z0h07J*BxXvWyJ{H{Pb6`oqSYJ88~O5H zy~?#A5hvsiB_bl)nDD-3R5) zOT~tqIG+PhO9U-njoPPLKBleL_6BGAXx{p%xd__g`ZJagdbDR(_*Qn>9>|D!AY5CX z{eAfD>{5Z$$nt6fQscV&ks1SDGpTVPU9N`itfqt=8%dm?Xlp30B%R*J^s2Ed3}u~u z9e*5No}Ac;yC$ri-!aY&>7bnlc4_C@f_CnJlJ45qyG#4--8R?0TWmbT_8rDBWdEWz zWkKZcXVbQxjlTzTaXS%5r4k~y67LrpH|{ZA&8mWN&CU>3C;K?{G0UzsB9h$4aIH)6l#Mnb&WLk= zUB4=}M#}tht1vgEN=H3VrKDS1=@Sd@rEqGU*ta&{A_+tn0Hyb+<~(@WvXA3~DeaEm zbU&S#=1c6>9#A_`i?ns)nIK2=MSnc|M>>1=yVcpYnfH``2np@hOvb0MoqH6tvx?#( zi9Tv)Db;Py&Zd3-E^Y`dUr_&hRPloPrxniEKYkr`e|PJk?g!+?KW6oR3g_XV{%lR@ z0k~@zZtnoq|8kLDre<5!|14-cSN|~r`HqoO_arY=rPHN7R79rcy+5cngS~mea4bpQ z%OT*t!j~>xS!RGU1HdT)>?@2H@s+nnMNihwW&SDJ)VHjsDjU<6mKW#{SYqG^1K7sn zx}|a&Zu2bp2-1`XBe4-+e9#wG00}6?u`e(hNyJOBXY&({+}ojNV!6-11Mg}S0IZ7X z(nG9{{ZBE#niPyAdJ-?K{KZi%+~kETHg%55UdHD5X&_9|MYDBZ5uD?i-_c#`m?AS7 zD%u;bsz3z%ED!-JB?8(ORfhb3VSYRU(~WFr;ghT9aiFs|Hsqu7+R7t6Kp)$k zHCCqot}HY2+RFLuIe86r!aK1s|4KT>kfD$9OhTQ#BR6y`pS%ZASH?SXXQ=u^hF+_v z#Lo$McQa#xcjR(R#V?K}qyj?Xa>)Vw%#1{CJRX zC3S;Hy7cX{x?yeZ6`8av!C3kP&alGxbxB;b?ZY0C*PAr=|V#Q?+VQ0ISFIRDc}?J8dHUa!ot>6T+ceiv<%T>X?RUKBzz z(mj=C1#ExsfN=H`t)Vc|6^8qs~Q>`vy{=i^h~-7sg~~dOse$v1Y#-IWy$B2=?JwT zHH=PV0?tv)y`ae+$UR%L?dG>kpReu*S7zuZbg9?;Vt51n#R%X)E@j5YxN}q2+NeKF ze_5unX}h|KQ9Bx>wD;0die~?W!kYYpi7TMj6UGhdXg&1jEnD;RDYvO&5`y4UdfhHhIpv z#A*NOnsZN+_PxfQW}7IitWNccXC%?hw6RZlQ=^k`8}*A zZ1U|Pma*bCs(M4)r``OMa&jUo51!dj5Y9wy@Dm`UH&d^B6|{*3%&GJ<__UhhZCmB{ z4i{QFS`{>9)SmpCYpOz!-+IV;3yvx4s{93hVV&f&3)7iBUrl;PLXbm})>2p$quAQ2 zAB_+l7%r0t-C?Pv2XU7}taf-=OLZV;(LbkB8@nf7H@qK6e@P#^h1&Z+b^%6Uj2Q3Z zIggu`r~K`e<{0|<_^H#Q=iNuinVOlm=y^RD`WwGj4?`!!_PrXu^`*Ss5 zHyYqYm|fNt9gG9hVn;()^CfObVgt)mlRuE;{ZT!d>GORKum2ZhU}&$6p45`p!hS~9A94GPMh5BD1RR@(Mw_Ltce82PUEvD-snnlpZwYQ}?C@{T z`UAsSv~YjNZrp9*oWmOLI7SHv*fW7LAlJ|7(np0gUGoy;RrrpomY2c%@cH`dv5K-> zBP3>v8xcv+$6(uSUywGYx;BIs9z!wQ>2Gb|7{(cD2wOw?Q|)cSQI3Wj3fwLZ4zCyX zvcwS72UNWQ>j?7M{vlG!oJd_5&Yyzzo(+Ey1Z_S&*E3+AkAg{i--rAQ+k1Gvy?GrZ zaD9_KyfJ-#p$>uvF_BV3wBN%>4OEpR-jb_~19AUV@&!PcC3;VtN2=17nlZ?BvML)h z?3U6|-KmXv+hGz(tpQIN2eV7$Kv(;A{GeC{^RAq2csAN=OuYvcAAPLeJKEb_d6PJi zvSMlMxOQdq2ttE83?0by;(N6)ncLc)sve!lQL?w=M;cBIW|k}^BUA51PlA9y1^4VT ziD=BwD(}Vr=ww2ejQGxafO3pOe`@VwQ@BV;nGVk?R#K*^cA5TZoFwu}N+35cKu*5Z z&V5+uD1(KMhaS{s`e}Gwx?KC@50m|~HoeBI?M>C2*S^9;T?pe6HIrkh6a$BD` z#?ogKC^G$T7bnQnjJ^qeaw3eS_1=(m)0tNy6&+*w4eVi5_VR6<+ISbxv!fb~%+O12 zhkMQBP!xL2VGv+@u^u8py2uviufSTN-NoNqfuCM)sJ&yyaxM0SqI2=p*w&#yMvO>w8wIg!ap z5fOLpB_03?3CQl3_{zy{QPc0wla!#7Yet`7J#NDL*$Z7)S6dVI);PC)f(BHx;J7@{ z9|IuMd=fJ$Qa~cb$#jTKfJ*-_@cnkmX5O9b%4Q4HBo$=pIU~-{#AH%1U}?vuIAQ?g36zKu63m^^;ImQQmi4h4(+77 zh%Qs}AvdCW<@dUGm)-^{J4WMo9hgIXA`s3Stp8eD^`mBbeCVYU=lJ-hrIz0Dt)}0I zvX;H%l|B*wQr$@gZAOwq=ygSYL6!XdU4RNa_ZtX%kF@Cp;B8sr%R;30aBQXZ{Kou5 zsi|xWp0teKt;+W~oYSLB9OhRIt6ci<6vkk5b~G)Bjxu#Bz;ZKKn04D&wwgC?lz4ZV z6IeE|FagEqN;L7_7c9|Jv!@EpY5sVs>g_KMK&z8a5Mp{A3_>cuJ(ZV$U#B)r72smN zY~1tqZYR(s5M#XGweRuW3Y~)3i`Ry0PYH%f`p_;0t`0w(sK_)y=5j390dEWZjnj{e z5@B=84v)lN5KCXD_1kq526e36KCe$Yqt_DNcNo(6R7J~YvCNTZ>BC`QUM$7=B`vS2 z#Sb}$Fc?m_Yp??SQ5kVWu(0lCZN0ih)8_JB*ShBXy4Dx(jE(8^9-xDB95?Y3S`ba&q-BL@@@CL5I-fzSF;*q^ zzJh?Oy-$K{14DwHD~_KQ=e8#;)1|*|!WAraDOv_BfQ0JYkPuVdz#FHEa6^-x*h-0J zeq1CxDUP?AbJ-mfBj+;rSb{w7%XpiLD)pyIL&{la0M3(0dTwk<=W;6JjUh{VTxI5D zy%p&O>8dG2S@{=)nrlY#3@IO17{-=fh zLQ6p2xnZ=Wzdslb67r4G0klNJ;A1H0bZNW@w2>5RUQj&oE z)pxa7R_$F5^JVf(l*cX4Cf@UvO1=h7yR9cj9A(RC4?3rkng%^*@nbjdG>flOe7a5C zKpxwR^ym3pui?2pAEwzzS4H{)HwtZif>>BM7RQktZ%z@TRJzlIExA&u`w%?cki*C_ zO~{ka{QX&1G5&a`pdcfB7?STK?Ql9?i>f@NbmN!so+)e$w5s}I;_UWzTIY1F60@|0$^30aiEquAnss1#yMc_OOknrf$B~4=OIx=gix}G5b4~T5mB%AoN^o zEvjFX)ux+Y(QK#aSpx-Bp>;Y?UFOV;ppI;N64q2q%-v>K|{@u&%`W z2N@(l-htOm{#i6s!)bH_J{k%B}>q?;@{XvD#&xNDeeW>B= z8T6w6W5!o!2x4mDwgiknz`U*`kJz(&3)AG3-jHqO@1CAoW6|t1sm!^{dkziX~QBJ?&1ttN6Er_-q)j z$fZG~?pkK2nG)EfsQsGT>j}qF zC*qTclwzt;vsmh|D(@If_L>YYDjh+EO-n%O!>X+Iv9|f}m1kNW_g|7;^9fZc@OTc^ z`=`v>mMTO~HZy#%1fI?aY_@X3Sub5@K$=a16rxmgY>kEqQokmcn$PCiGiM9Akz+(w?X)A()7%&qF+ zH(27bdS3h)v8hg5JS zPe0RExWAHyly*){wwS(?%&IG;nTY3+ul*ov=w0 z5X(DU2Bu*Qh{Z_cWU+0E8noUK%lsW67H*+8YSB36j{MLllwV5SE>|jx57%p3Dz!3K z>QP%PbDYs3q?dwXali1qYpgF9Vgg)N;K5ISuiCAt!Gk1kEe}S zQCh*AcoWSkF#7zdR5an-_eW}Fafd}rH3Qrh2d$xYWxOs=4kJ@597Xh}j7GRswKu06 zCJsxgwiewRAnc&KMsjpJajQi*e((b&tccTV;k*OA@D5~>JZfdgjChKb!IugeXa&^= zcwIsC+CfBY!Q^xXo$0JfI(wu^zLTB?4-8T#=ThI|tBXPExLjg{snbyVj;vK9f}D-H z#3M=6LIk&m6*6|!1rSH(AjSm{ye(4%F*pbDw*UfBPz14m4q|x#QP~CJv>e2jK!_x$ z;>+`Jw+foB-Y z@hL2=j~>(GKIdKK%rUG$#Efq^!C4E^H9MjSvotXK(1WKqy=AP?`Y;U&I~CZ6-YfvR zDF7O0K<90p1Nx)@=V~Ub|6Bjak53Ac`69PEfKC2)g>vFSy1GF@$a&iinmMuDA;Cyj6TEMD^;by&LIUPuVM^q*0*&_de|s^PZR3& zuqJ(5_os)&^ld{1`Rki{3TCjrTirJ+t@^47L{{r#93Pb$B)-S;ZGxrQ`)iYR7qeiS z$jyJIPw0gCtl{!gAhfsML~H%+(59VUnY~%zP2>o|6BX7zb`VY}{7ybRN#PfAVOw%z zoiiN|&zm1FE#l<^=QgSD@F}0J_g?@Ved~^Ew6b?b_7C3Bk$6D*2 zPX%_k70(Pvm4V3$@_vWpi4P)iyXS$ z9J>8M=f+JQJD7OPNxV8d%9^}_Ou@0yLj1k9fd3eWf3d?q?*eQ73p!95*jaI44)B-d z@DI-8A86{4re~S=r;)BZn3*U_nx18TAA!oPXfq`J^GK?NgvFqcoD(21C8*pX`H1~h zA*tL9$>&OO2V^S>kn9#9sZdPS%>OR~z#NoZY5+^T2TAki5D2FF{qNgsKCn$cHD6uC94&)&>~Ld&yv?Teg}X3r%T= zwNJfOu>bH}Rn7zpdln}M&1wERjkMc9xfL`tEdde)G5B~S<57Lv7xVIOs#6ARGmX@&L4W>9I-{Z70KoXi279w!2iMk z(Hn=Mg2mP)WqAXHPi2b?5G#oI-y0zQvOhxjr0&7u`vJpIV1W3wMf`6K5GM&~Nr-f` z;V3Xb97}|3mZ(Fee`gay4zoCUF%I4k=JV%~(>fyimyTt#JCZ)oGS8@LrC)zwg|}sU z#q#~A!!=t44cm5Wbxwi3LJGZ}OP%;bc#ZdL(V%dpFz*#&o^OrmYOi=OK%X-w$X}z- zAY@!{i|8waeqpzu;+J@M3+xrWyOiqe73)!$ zU8&RlyHZhX&7}5@R^D5%k{nV{>OG}-d&Tt-z~=Uf3yCeZS4^kyf8Ad3^gcyX=%*AI z*eg0qMFIu(icc+Ks#zC*fY!EbuQ-n~OdxyPat_PHu$d9&1qeH+vDqsgvIut&_ygi0k@P3A`uJ($VH=Xr309dqWz9X{SpYXRfXmq{CNa!GxgAWXu=C;p+{_T) zF$}5T%&t+c@in`~PtiZLj{7`PepI=Cg7h@39P8`Cq5Tp@K#VH^E61*eH?(q;XdRrl za(w+dXfyqPJ3&7+4bA8B_A`T(x51weT9mamE#7wa8x!+ybcqz0X^G#oy~NX z$KHLv{{bt9%x_z?a*R_)TZ7ZX{$I0r%sC>ocx)TFS?*GF$N?;+3oRb?oKJd~cKbc@ z_Krss{u20L9sQ`nALPPrf#6*`404judp0YC?B4~`A(-6zf?4&m|4=Sp_6dcj=EG7g z{af?l*$Q7n7<Id&YCD;j{M&n$=&ZhL^r(Lw(j+WX$xrp#{}< z+uTrJ!A2^rpPU=<$@QqdXJqdJ3HFR$c{JHq4e~reW@^g8W`4?pz?Z{TEo??OG0=?4 zo(Y!I`~}p?>=2KsW;1ejhU^T5AIOLQOW`T`@Z$<6a$#2P9}Y;2acbKSv6nUaGI!0trdvOVJ~E&gSSknIB`m=`vhYU2ZXM8DPOWIbXeSpS24R5kMV zL2#LxyM#oxmDvSI`Y)&A4#{#jJ7$ra!Qvm2N3s=2!Xj%<5)PSGuCNC78SknsS_tI6Mrd|ICf9F8qk;!`p-7Sow6j@s@j>r1GY(Xok&tzs2;Q1K=rT z6Wv##v3VaHA~gYLaOYgQZO-30wJerqak?_zCpKia)i0owCs&xZ7WkLO(lPj2UAZ}D zYF*0ud1btZEsZnd4`_Lu{tbt{c=kvLSul zIByeu7vA+MKLg2}x`y=SWw9YOv!7Spv^_YIgXbf4X8n5U-sxX)7ONXBcD-=S<)UO` zEr}|6h1&tkqEFHoCPLJ%zntBT0JwHnI}^hNGot0coB|$s#yi>a9{8HTE}VN zUvl_McDR)}*UBb-#43VX#Kr&@@6niwRm9pBY}GJ^*GB7KD-(O7DxBk#FJois+!sJG zvz6lQHNfwwxk{ z07ByQzGTA@ul>NUP)^2;sSOS3+uIEdZcw^tc41@(QAqmGMusrbcdN$qMbMGFFLO?c z^_0&NK~9PY7 zpes51gPc;9Py?a3(dE(fG3BWj+E!<7*wji?B>90LaK4J7(>7qDT^ ziKmrvtZG_6zp|wV7%JM{+o};aF-J&|q~2m`OyR5iZs#&1Bn`9eSPq7yB1zF+G<*M^ zF#5hUSo&q)=Zogq=}lzrK2=x6wicnlZp&;JDVBL_erM-&_cU-SJ2s^B z?PoM$#U}_XeOiIz=~Nh#^HcaSOof26vQ-eki73^n%LU-3>f^*c0uRa8Kb`^tzeToF z7%9gm1YY6Yd62r4ses8*17$;2$UxvL@QpWAjpQ6{P4+by~Zl?)OAsLI?pqwkaQz`#+06J;v1*;=V*-D3)0UHFq9jR z|FES;v%fHUTnjz=zp!4{oGS57FoD$JuSX|geKUN})6wkBfU4seu^fZgMI0a;x2}Y| zdyrTslm))dx>~59HxCgQcw+^444KV6U)XnR7H5@<_|$$l%LqBhK=#XM5MY4~!9H}mNJEphS>rHE@sjZBYh z9+|#&Y(wg#QHreNqgfv@J|OE{7wEiQL2I72AgK=LOPb8N4&tNEYRZT4bkY9Js(PkR z!+DrIKA{TEnftP&^>n75l$~= zjzjL&jtkUW$aBVdNN#K6uc%KnyX#)!LhC3D7PR(9IeLrEQU!=>NGG=_D+V{Fo8-{W zfe2(ptWZ`wLNjoSQ^VN}P0Y7oURIzNyPl`(B8g2l=Dp$6qL5D>*mLSvc-`8x~tFLVSU0&vO|8k&ZT$HrB^s3PM98w8SlOQg8iRWuAIhD-eLxORR0F{r;Wn1#Rh+ zZ#{ZsSiIG4Ut<^smMSPH$_u_si=SGBnCMb{CtLVw__|hzfjzi{NSc8P}E1La_h~!|Tg0(-I?QJvRQwpL=erc}VOPER7K_I97g9D{E zc@F(%tnj~tMK7C#{^^;a?+s(Vo(L+NJ0l4t&i2giwoMvc$s$Wjo&vAWd4ctOMZT5d*s^d zR~XH-G9gO5F*Fq(>A!AuVthAwV zEvDkn10=`wiZb6%ikGBzOnZMTR%Dy`+q<>v&8^^}N8^syK{Qpu+J%g z{`xpO=V!3Z*I_4Xd*iQlze2Byxp3qW4vL0UhsnVk!|@+hZ$eN|U^{#3JJbB=$qlLX zfqOqMyKF^1)+$_|HN`HV=G<(-bvubF`2hy6x|AM0AI*NSSX%XVWD_ZJ*;SQsZ=Sd%Pl(Vgxwkuw$M++&Kr9FZ&5jmtW~VFX0?g>UBt=d8ThzN@n78 zsvd&`zKC3Bhq1H>92iUADNZc9t(KPmEMB+L(FT!SdXMgt#xt@+E6UO;Y9HaOog`q- zZqh{&OqFCW;gJ^JKdUSu+z*b{$#0qB`DF#KT>U@-Zp>c0z1_iQ?OA1!|Ou z!zP7ND~?U?yQ-mWQ8zpCh>ptj`)SQ#}bxxPLPdl zvUPIp!bnEjU2x)lEK(sjg}fxpQI=1FsVY-v2^=HTE=->%{VTCz7c#J+u!$4YeNU@v-yL$6R$vU11#_98ge)5lm6lVL(s^d(y(hA=!=~GRNYB z%G7LLnT^ySHwI=Cgk1l7TG;ZJicsAl};xmtr<^HJ_2iE}KM7Jo~FTvE*HLMC9rDfFv8f1D0k9x1^ELW1-qu@kvT-97Qn4IF*;G)sxdvP2}K(X zn<65KE0lv1?ejMrk(%H3UN;)u(ul&p|Bpn+HN8$$pW$e&8a4C(45_u)K+a&PaQDe* zOITlG(rtNxpcBS-hV;;8>7ipIiMMH3+cD`OJC)`7pwI-@+(%IiFKPv!{FIZ zyH#Q&wp5+KB90d>#D7w^E^4yhxr>(ZOXd1$*k4kK0QQS@n-M0AqCNe@b?ZtZ4J)`I zjK+_mwf+2yO=~00o`Bo&a zgSp8m;Lr+x&%IHHZZ?&vj@oknry>qT^Fi+o%6r|xYB1`&@)O-us*`9kHIm1xLMli; z6QF%&FR;urwDqo~oV-q0SI`R-G~b?U&^P~dT#;0Dkc2X0J<6XT>xZhrg6 z?y;>4?$i64SJS>lFzThdJkg2Nx(Y@(OX?k&>$@$Cq+aC%dO?g1{k>?LU0C)Yypbn5 zudSr^7@~9kCU*Ix_=ne>&ZtkVu1{@5@w%SvF+^Wx=**%y&AgV}0S7A6UDLru_y~Js2jx5+I zgmDuZ)6-jtOV?ej*~ICDGpZ&)8Q4Swk+a%fFARA$?M(0*pzN(V{^yPspg}{2V*l9r8+uyp93{E zZ8X3iZEIvJKTvW^f$?_$Fj#+>%62v3pQkTg&E;o-zUCieRj*@)tc*43#ttc$4XE?4co2|BU|*6?S}LWNOL01VbO4`we65G@XCYAC3=y z$yYsHp6N3jR+joydT3^7D^%n?cs-qJ3QT-w8Ie&}x@%|yr*W>de45Of!&!o&(y&-nVUMAhrzr_Zm(33NIhDe$Yzz@tZS5`Pabj)IEbsA`@HT-I@i18)~^5a(+YP*k@t`-tbQa zBsZV5k{%^|+G{lYtQV0n-Y_C173%ywNy)*FtX&dM+u&~tb`D%K{FA#;TZX?e^)eBW zhd=i(p|WnAO>{RRY>Webx|>6a?18-fURGu+!%;%El_=Ye4u5J)+v2^`A@nYjEfz!t z^UU7f@)lCxg30Fp=nHGlyo;^#H>mTcF)Uu1Q9}g#qm7VJ@|MiIG!LTJY)p^$4pJeo zh2(=`ln~lL$1O8G76!xIg%0nz2;R4xDO+2`9)z{V;kKAa@>-1$Q19+9M#@5bCD^QWogwhf!O2ZfI3i<@8{F!EpL#jX1m`tRD1)KPH$ zp5f={%8nwDnQ7`DUmG z&2G%r;;<|gjvVEd3YQVDr9!k)o27pz z`jm%`w-#cN-Q^t2L`t7y>EA1T6*AU)*3#$u6I^;RWx@!GSGWFd(318QVw~saVX`7Q zB(^!w_jwdLZ*LHDx)WLm4Q|K7#cjozZe7JRRhCNAj^3a~4NDd=(L4S3K!K&L+sl!Z zwg<$J{4cE!SRZ3OM*=jmZ_Rt=16E)Vjzt=l`Y#9VTWamwWbIe`)>63f9d**nbduvE zUGy2hn%Aq*OOs!{>%I$ltNz3+B( z12Wj3N1Wq6^7In-X&KW+)cW@@-q6kze%yHe75w?}6gg--C)#*Qaqt%~D5BXZl;gij zcg@?u64xp5VTdDGI}Y}4+bO6Cwe$z73hC0Gf7RgBoOZOjXt1}3hWQ07w< zyhE)7;~<@cB|7e9$si&0G2;uVIeMA5k=pq$(HY)InvH1pAI17ymj6xhL_Gv z=}zF;a!<&%?nVtVeO5K-XK3|soBR~&4R4{3%q*F_8ffJ{5Ul>C1gxJmIF*X|+B7xr zt8LyqU*lvANgkqN?olymidp*`%Qx?ISL7uWIr}#xhRW@OC;{FJaWHZ@Ltfv4Naz1W zwX6BdVI?K=E>~_SwS}V1xuWGU`4QdGj~#(Oi_c$w_`ETKNxn4UT?UcWOzF0w?o6NY z;!%;|OTjqWVH^lX$F+7~Zs@}9I>Mzh8Ld+4rhp_feET zhaSl3hqJY1n*FQd?gLo! z3(7x;li6sIT@&+(LF~5r&k#uMTP&j~)wcD#Z|Rxvf$Ia{!|rZ&Z5iQ(+FaqS{E?{N zZH68tEYA4+C7%J+NwU!m8|~WPKF4e%R2!>^B>zb~RX&giyH(~5!#+H?Z_m52px`Xk zk(J%u#D_sXmSQQMF8w3ZCZ?e7a!n1djHS-3_8K&n!IWTE+wKlqEJHm{1!JA({p*Ib z_C>kscgK;b>zF9LOaeb;vt!>XX5(v`VQq`>=f zA38gGcXw}~Hyc_CJMbO#irT@itGH{&JKyGll{R#ZsY|N8R&s_7*_F;Qmm>Xnb)?=I zy?B9Z%WyF1wQg%g@=%*zyobRiWJwjzEuOKz3|6iHk6 zfOFB($#r2%Dc!qaoEl5dM3S0{{vDc+;$&kf-gmfB=+=3o6z(*OldFIBTF|cjlcS%Z zTWhd0{SWn;CUepI`K z7lR@q6l>H5GzT{HP-}yA40fhpZqj@kdW*8d4A_Azc@RYAi;?G>&>MXjJE zB4R}@L_{qD8Xw4sfJWg$_1d2Qcg@T`XXoTqyk395|L=10napd=nwd3g)~s2x_w3$p zs|HZxqCX#(if4^B^>gQVy#D6*slyzR13QnSFj4nopOL=k5s55=e;xgO13|NOhXhh8199IqXlqp%KNFkgnR4los(69 z_ss4#P$*IM1*Apn$WD~p0@TSmrTEaiQZY^|^P9lQbwle*w*M6y=9MXw|5VAIXG-4w zYss9Smwfk6i$#C__+uq!{=8)Rv63JB08*lay|B$LWwNy{_fP(Vy*o8oTEwZJI@Yxx ze7t7+@oRw;4n@Sq}9&?xnmr)Z32*FLEB4B7REtpdb~|7qPzlVhpoSo_JF7u9Vj^ z+oTQD(P}!deD9b)NcwKlm+wuEs6E0t)V6%@!apd%7#}ZreQW13@}!=_znzRkx)pjd z>`I#so*FB8H_0HV zw|&iqLx1K$@b7i;_pX5o?TS^oWrC+8>fXkbZ}_zL3N_918DFu2%o9d*tFKj6fJ-K$ z4HA)KA~*XWnX9F)7AD%e=yef_T)DWECL1xhL*K!q*5!E&D^Lx`g!Xmpob}U@m)~rUZ-3}Ly?9H7O+--Tw#1rZAJ4U z-y9vg&tT6l)WdCKuf0To7hMZ*tGpoT;=oVjMxNOtQgnL!T7jVkYyfdu2=Oe`Xo@^ zaozek8P^g)adFCH6507)$jt8B9oHo)YQ|NbJ>HZRc`wy7u7CJ!;<)N_SozY09@ks| zV^=1}#`V^1G)6yuyie}pRfGBh^_W4ujx-t64mAYRWl+Dl$P6mqwNgt`zCc9E0!X6k zRRW!VtR#uU>AS>cD4V8_NnmeEHLYY&_vgh1^=oEOeI&i> zaEqh}sC8w&koyNuFo&bPnOH95VM#~5R1mpWXrOl!JCDP*hUu?>K1OM(q&31G^QBt3 zo!ylKIg;=kWw5{K3Dx^Sx8G7AAo+Vtzd0N_c8#j))jJOV#+AqF2HHq@s_A$Mz@`DK zX+ZDqL0)jUjG#)@T(`5E)Lx$Dj2>*WcQ&YD{bS@a8o7-6PUsjl<2*&sTtL53$dcH< zJuEx>!(XF*<_!~V{6+9V`9>Q06j(vHgVQ3|a5*BU>!5lpo+tK%Tn8}(%%ZR&8`hKp zxxf4IUQwXI^LH>twldK0$d0XOLh7SUk^dw`MquaX1#EB1U7t~G^GBd%`}&PjsQ4rC z)}A4){WGNt4xcHV7GCY;dIs-+{e?HYq~dWTM?UW2A1gq6Qx<9bw;KHG1V3gD)jWs}He+ z(b4lF-^^2_Q7kXd&C8aJJ$Cz_)Xc{ue2`fo8bzSsmRATS8%1{Io`qBF9rHzA32nkC zgQC{zry}GY4jy|BMHaZOA|LdNq~p_VJG(&0Gi@jg`uX{n5z_h)@JA9-d;f!NGMCY?cRU2D$oW)= znEW0U#9p{j%imk%%BwaA%4qbbsA7>(fO;3e{UuN9HSpG1V4we_z3=n*3UywpR4i}S zG^!@Zc4@~}$(4skcpi@Gcxiwt*!piJvT{BR>Y$Wt@=Eru(oYV^rv>(}bxM+c%;mxM zc2T)X_7`&D0}pX5&CR#(ctSMJJNTv?k7DIOE_pU$dW0R~nP?zEd)N4Q+Wyuaba!?; z+kfAO{iI=KieqPt@nhZv-xDqDB2^Yg_B=0!nkovr{f+e9FvxWtu7V{!O1}s?o#>YT&UYd9X2{-+oh1M{WPUZ`GcgB1j80+ho43 z+SA<4V`X&YI%(A&?hpT_LUv&Z4PUv}{mKJ#4+Ye|?Ls(LreE?D?jC3P(^GJVDq>*e zoi|rsVJ?2~6j?RLYbQjTk%|!gn$ECwt5#Q{rzD$Jq_zIr9 zt;UqxIZGzc{tFMzlQzE|S!1#D_EG%sf1SlzayuclzhbM4s>4`EHbjq$?#LsevKnYR zi5z5$=2A>v@0*D1_E<~z{|76;t6_5Gd_17WA#yr!LPt5U@(fb%)gsf4{p#(=F}?}h zD-UjHB>{I&}&EyOs zvg~~@?shdjo}wpgLVBOYSN0sJlOydr#7NM-QY7Hsg7iI4cwWET3gJq?tX{KPx%a)O z6wgZdS1Z{8Iv4`Khhi}|U0$$C7gb{wU+5Ob6-}dEIC{_D_x{5S@-x74uc?;iC2T6I9tzlPl29ygBuDRI#j z)cE`p+ z!FQojAbBeB;bZjVa4RUF{Kh%rE&9eRsQzO#Ii?wdyhk-_Q-!RQRTdQHwSsN7y1Z)AHGc>UQkqQL*iMH zp8$u1?fn${5QgAk@;MMwtk64I(N@8cbvs$SP@zVr_eHYgjFxo7IOxeys+lrr_kI;@ zn1F@*B0pv_D~{9J$<8xTJu>TW380?PX$RhrKT_07%T6c#0H>`E@)aF?T!-PTm$r%b)NfYzUj}zfc}xP(>qtS^%zl zsL=?=Zum@uI@Yj0lf z@4!gmAJG>*I8R7dbk~2KYr0-K+vG+9Oc%gk1-w^`ddv!WkH{mDdTXWo-G4>;?|Gv4 zG>(UX7pb5bxkmnt5~huXEYEyui|_YS=$^3?c;ze{4GZ zv2}gyU6;dSF9hx-;9mWi$a8nU;eN{Ezm#^*W+N-|6(}i$-f>hGWR4#8UReA)At-t+ zZ7XHG(fEtaN0>RbJK|Hh0kQRYo<4twbd&fRNL_Ls=+dDRaK`rj;a4&YUr!ryo?>J4SfmSw-k`O<{t1e=rvwv*ixg=tn-M=U>4PL%~ ztr&pEPthlOC3}5Z?kE-C*K#Z0OMdkhweCeDZU2cVxJRuaNSP^9R_!^yYR}W^*rnjn zO|(G4$@yO(vIbZ&hreph^W?e93K)`oYHtzJ#C=~-1Yi!Z#w2qaS<=}FQkA>~Z_-1I z3JOWVqx0R40;MW?6}3_-Qjdbl_s9W?WEo)kw*Q|+B^(r$U|RUH`yA`ejv)|HaB z`q;HnP&T$lK69b0pL%Jz52^cM=%9`p%*`l#eu{%FwdjO2e1h4DmDF#%>r* zw^6tR0^T}>B6Db&qTUA-Np{c&GWRa};jd)|F8T#CaKJfb^V--m3p?A@qLcFJJ<@GC zqkLO>t(vY+3)>NJs{Orkz^nHUnr90hZ4^Edvh^M%FYE)|m@Nk&2*{LjH#wC~*|z4IhI*%A z!*!vmX3JW=cI8T^G1Syj*X(SqC99>`2{kr0G&;5Qz+S4r$_pv3TUB0OTi;w>PLbx8 z#`;jTQ{PZOizFwfd0RN-Or3pxZf?``*^aZOCgfCZsI9AQ-sUtn7mGxC2 zr(q+_X=-k)t!j3fS~gVGRW>zAqF}3Sa;ih&#!yvdbEtYI#j2gnmD`*RArNhD*h0ND zuhQArLMuYfmQZ6;t#oRm>E3LsynO2HxlM@;m9+jXb!lB%-yCYBLjF5dHI?<7LNuTm z5>eGGr@4j(ZEmP;QKY1z`a0E^x`xVX)fRf#P#=<}$FPLK6mD#&3N9rwu0s)s)Hiee9R)xaN^nWIU z(dLD?& zjl!Y6~(SjjLoE}#`vrWNd4s%~hhZK@TrKUuSugcws*mzK0_+{l1et68wQwuu&2 z)y#zcrejl^i_^b)G-LbPC{a?_?ZP4kozwkK&esk;43-3lt5>RQIaod-?Q&Z#%H z%+%H0*rLI$7(BFy6=*V0)s|(%Lv=%_NpVwkXrmBJCMuJ#l0olJepQc8qv^Myb7h<@7C13lOnd({r*flA{b_3q zT@7C#399K(V<;RFNd(6?R&HyOQRqho-UfCF)>2=MG!kOPS<`K@=8k?Pp%q*^Jw7hO zk0T?bf3db#!n>O{R}N^B9@5y9h{1cuJ*R1UeB?D=&pd3K5E zEGROXdSEs*RW;Uzn`QP0<|;kUHr9%;P>aMgk$Me!MW_z7&Js=%vECfo#Hg*S4Q-vh z3R&N{O$9fr;1)@(Z4PY~;MwKnn?kHbs^P=H!!?^@u!(Sjp{cI6DpbC)v0-yL)kq!I zu=O{UZ!AY(G}mq#39c#zr~8atY_7bXsWo+W9{*tSaDx_7m31*`I(7CO7AeWxRJ$cq zuO(GtyA>nOHqDLo4mzvly}Tw=$NJNBp7zU?@Sh#t)|!w%yI+2xDqEt9&SoX5TCt|K zu3C>@KfJ@0LzxhnSGJ^Zb;ISMjcRn@lhv$`YfuqJ;FOxmrpo5##+>O3kP1k61ZK#o zuiP9;SVs)n0pnC&PA|(_>XnENl`pMt*<4T?*H{`BromjvAX$lI?`)cB9$8Ilh138UB>7J&+i2<4_OHE{;eV_><)P<0FQ z!&_<~9plAj_nVuE_&sp-8@4rvnmoKKeHjKGjYY2#-ZI0%*Hni43yERzD*>QrHGDgm z(&24dTEw6&%d8j8jg|FH%xTy)Ca{!VjbN*;MW1cLMx zb+bC;s;^ezEWHA>G_;6Tr<6al_QggTEg{wyI^gZM+R(%~q>@dHQA1f(6ix~^vxRCB z(HFxq+ofAVRqRGQ%}J=&tA`CNS6L-Hlv+{ShAF2Tw>ezdtRQ8lNUIb-YXpN9rpIvc z78X>+$x79$YYbIZZv))brmN2s!VE*tp?gL-qt{9MP*i00cql>7hm)&?1J=7$q57)2 zrX`ImI>il*RiP`wHPSeK?+i~7ig;OL!^VM_-Wi_4hE=+HYn9%7PV+9<)7TrLJR6E` z2!+^OZ`S(oZ0GV2+j31~R#e#r#Z)t+Gb_F@YH~AshuAiHs@jH|?JnBd9Jch+5+_t6 zd#e70R7<5!XP8c!?hGfdSgD#Djap~Pj(Kxs{Wf>|iN?s{URia$S2o-j+s;|_A(Tk8 zMz(C|?n=c{8&{=N#R?CjkDy&Px=JgJy`se^vX}$vLW+*UYw?Z8hHdUvQFU!-`KRTp zD6i7DVd2H(?~6?)E#78-vqgn5i_oaDe=}LR6kL2%iRb-A{@q%4Ioix0x2VM9{`Q$lSI2GG}2kJ_f`B{DV~1K?eLs1gAJSV7#h zWOj=p>uT$(8XDEAqqK65dZ2)eilA+fdH@FEQT8aA!Z*C}O?uQLuB*Mk%rS(f$^subO=4s4M72f7mE%mypmgAV( z5ufBvPGu_tCDyLQ`V_rADp_KFygjqEzN;740eBMNhRb)Snpd76jShxL>`+yxT22mPTm?JD_TpygQTBPYEQ%#X ztwf3S>p`axu@>l&xuQ7~R;GP3BX0~fHh9?9s%wBgEdGtP$_}g4_r?&WRx~wM`VAqp zKFpJ9af&e$s1xgtcVEjpSD2stc$b$au07HNW3PfdTQE1v8APK#C}?0O;z)0FKL@e@ zvlSBCTCAu7Ol)^}n-MRH)Wh~m79Z8EaD%i;uKCt3<&6ir73V|ylal)wkEOKYkT(aawA@FcsS{U9?jw5 zlx#JC!}YJwyM9|@7zUYlyRJ z)ml5Yp326m8jx{-23Ix-pIYd{F1xZSG=?}KVLYr=wVHlvNi{s6EN*hDg%ypbAY&nO%mJB+cW$#$YH)M^d_rdiWOX=I+tDGjj}&L_Naj<_0|z3FZO?er$= zs2nkPQ%zi*JPekn&Lk+HPbCPrty3jpsT&#^>LgP)(S_Lv{iO}YS0|M%oS61MKdr=o zD>QAi^igL0CTm(h?ES~Tzdg2!Q!os@O$%g!HpgQPEo?ijP%B4Tb=w9=F*A#djwCCG zvCt-%8WpD+le^v$Y8&d*E3D=g1}J{qz`kgnd;FvHCgCQp1+_nu4iF2R69a2k z{R5Xp*+vh(%(*$T(Vbd78zTuPWBqB?&!$RUwVX%7&<4nCLus{}!#qF|>Ne%T&NG$% zI@8%$SGlQapdy5=IK$ETVu~{j^ZiQd+=Jn|+?pWTj{eSD>_1R=W&RxuMBQJd)5;-%?ZCGG~@% z-n;VM^^fr&tHa~v9r&HNF5FG>?x1nru$w0S1Gs%2xP=K}iF?z$W#36y>KEtYk~;6i zJ%E$2i_6V-XnWhyNShO`g85^n|^%m`r+(CvUDN zoKN_(+;j3JoLlA_p0JyCGX7(f+YP>_P5B7Ek9Zij%Y*Zyp0MC;!L0|z4KL?Piq+h~ z@W0W0*3PhV&l{HcD9)SaE&EQw7I^ZxJZijYllbB!U7U-{881_W$rVN2 z#Ot`GW+iSWZVYZ8ZpYFS(Hn6aai7P10=IJYiReSiPegx*8^7vAbT0Ak%fW+d$Axiy zxCrlc{Sx;iE|u5m{)T_n?i113A3hO%9={v+1KeTU*KrxRbI4nP3*$bHdl)yn{X}%Z zZ6~5HRC11^NyNtrKE<{8|ZxJlc< zi>t-mj{6qw*SJ*R=HOg?JJD~6J%7m~$YRalNL+Sa%H(LyITEc7c^}@Z z;yElHcVz!6XXew)$w}Pdyz0cZ?z@IWaiHnGPBs%k=2*Eh9nR#p#Z zOOun^T0M78bzW7qv&hMr?mm<2#WYg+4Y~93=3g*J%8Siv0FI@b!#selSw@*Y#A4-W zWC+wcPu%(3cwl>zPCmM~dQCSuov7KT~tE`@-9t-zc6JyT>X=|wr`%r+M zI=w;a*H4>Q=@wMF48ZZWdQ4spisFxq=*m44Vu^kF4|02dWo(=qa-~v7-xDsdE%Dvxp64YNI^7oZC9J)lgz!zMkhU zp%U>YlCdAX6Dz0v{qhqFlV2szxATrhIn%l-v;k8wiJo5q{k$e^1vQuj$5Y(Uzf2y0 z4=t7VM7)`V)g#X3SZ|DYbEP)sIT50X_9^fs+K~Dq)a{KK^sK^uHgl`L*_5Jc+&O4< zkHB?#SMYGYozQYUobjG$_$_LdV@Wjq)i20M%ht(z9C2{?4U3v5-n#9^@-S;fmFY&T zf1y@EXYiSaQHh5*Q^2NXPSJ@gTVzA6d7Q(lrY9h5aG#^yz|e-OH^m-AlQU{h_15K= zawd2=FX6=M=h#(0_Ng9m(ESsh*8uK(G~l!kT6^HJDT-}0wlL_?s&=325(B6#AXcb$ z6AMj~)e>f+htv@PtcUOrn|TwD&dAF~{9^Rr^g;~<#=r7#{G7YIT*Nq}+KkAgm%MMJ z9%&-Q*jhRGV=c3)u#>`1G_{cmcr2<;k3Da`@bZq;SS~4zo zb^O;Rdu0)}LW+x7{^k86s!?aUR>2j8rKPI9JfkWPBs4WQg!vcZpO`G=5Jp=u)wzu< zucm*SD;Xk1Yu(>!-ftqVET)a+wU$^`g%0&tWy`G^Qdl7^2E5AJU{zXIS(hqAR@c(fb;5Wak)^4Ou{(H^dCxb$1cqxq@4 zpO0UIpZDp?(RJvZO4!N;drzU z{}_Jq81i4I9{jvN9*@@H=lqHCl8)bnU(Bm;Ltv z{G9X?(ZA!%ebjl}vs7~GiD)x^4PVQ!#zA*{2S30^YVz@O9QJDXN6$JD{TO}({~-R6 zsqCpF9shUuHPhIeol1H9HTbRPVo%0DhJOS<=RDdu9(u3`ybu2fd%(a1$}eYMh@ZFe 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%0A8DK_8zvt3HMX+UtH{^Tk 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

ABpQxMUN$ zp=cl~UriEKQgB5-beiBsrH!$E?*S1`?=|N5t6VPL0Q^pqbPcwK1|(?;g@Z+aS_@4^EO&@^j$WZ za-$4mOX1)e;%?m5knkJWXZHvH>Sthi$!+$Prtkx8vmY~p(LHUmkBa(^{FgVBC~j^D*uu`mvR}-gg4{1v>XILqFY3ApB`@UYy z9g?R1)sm07mnKalY%J`Fzl|-}65S7w4Uml*C>%~1!Ao9~?|F{0xqDmC1tjD|?=3)n z>W+CJ0OYGV6UC-GVYicBt;itqK)DpQL+a6XXjCG2htuc?YbFt^`GMBb3UaR69*uOZ zp0O#_pdd=EAQC|5M17IUe(wHPD^Ml3rkW`r_3}kDiewMXgiO|3zQ7@zgAMbz>1+@x zczQLU`8*u;`x9e0N`ih3X>v`Tr_|8AS1mZ%lb{>2&jA-LD6wu2y(*!O6SI`0kb>)$ zjE3bqcm7YQe4`UQFRB7YR`<=%G#pu?VJZZ%525U){8p|YASY(;PPH<#~#) zW{%V{SECQP*Ol&)2~|}-h!T@>=TNgr$!d(*MVy{8nL?S*rfLR!T9r`??|tPL#_GCw zq@O$G7k1!vDOG4a&xEHGoW*TQyOVk3H*_Ob#);t#1bIXH)6P~Y)2!6SY+|>O#>$Cd zGQcoVCq>DrI4)cCcP&3Gb4Dt4sZ}+f3Tg>(zUsk$8L2U zsa}_ph?E6)S3$wnR%_iSy+&F!F?Vxh+E_;^Z*{evigb2vaW{86KKN>PZw0afPl`+P zkj>zcvyv#{Zh1{=5qa^p6mssMSPnOwWFrio|E$8{XCkkd3P+|7Dd868qc#T0LNJ?M}!+3ZAVupjXmgekj36m)a6LoC4G zb0$YGcycFqClAu_VBTtgZ0Ak_6}(Uz;>-T3wlIy6?kP`pO>6ZvJ2FI!D5Z Z0q zm~I&eb<_`%NKA~u(48YG2+E*eZjQZAUv)gcl3)z~VQtw6`W3QNFkWP}d%_?Hf#KlX zx~l2;Grp3?&95Nvb#7Y&?^q9AfZJ?5@5f3vC=UR+0~&Rs>HUj7Li;!%GS za7pT!^}1OJkn1|mWTTXjqhwd6>-Xu$I$!9Y?`h#u?qkhnB>CnapwgH~rG)h^rD5IILSNIU^r_Y?& zAnBShw1+XQ%d3*0*A@fmnFae|IuM}wDEE{HUX8orOye+iMSa>8b!k_Orqu`pk$c5I z>)d%UJf{hsSq|XdO#NSfRh1KfD>a9}{-T$+0uz>j8DoJ86b z3z0;Q&6(F0tFefKvP6Ej#lse;Sio!I`3C$UJl#*n^8diwm(U=77F=Yzl@xc_fONQ@Hn+%Q z#vZQ-^YE!mgxE;w6eC;zrr z;u#ffH;Vja`A-;vwhNEhhBFJ>?GGpnFEch|SzVr3bMr zH=WKI)gO~f*oM%hio99-Ym^$NL6(Sk z`bOO)A|`#FPm7u>quw|g=2uup-4ckJA-NNCxtH}Ufp6k#mHTu<6+0AY2`=EX55jD; zx5qu6^Jeg&?mJX!cSlmv#Y)#|(7-=(k8q|*FmUZ}F-JOXsr*AtG@D}%(al&35C&In z=kA~8Mhlo?QJyL5hz#O*>hC)cEZ@R=S#oSm>$z~P$IJgG0gT@G+90 zdKj#pt^26G^=f?W8kOJW<%4Qe~R!kDp%a!Q9_o!cuF9R}PIp;b3&AlV(m zd+B$cAU1-pUS#J$`(T8p`~&TuWv4paP1ZPqq;;KLPYT_d4E*&$-^hdquckAhI(KzZ zdu<}xFYxWtW9Nhe?X!wn0*{$Sk|FS~s`+v*6)URReUU4>qGi^Jkq&qBKML#!P>Qob zc9oE#i~l8?oS5?KWJ@Hvtc-4$|1^8jEG>?6J4h80!m>>FYc4D7ZH~%vM-r|TG?MEE zZam^gQs=HIadROzV+q_AJx?>zBGJQr2K3y)ggM7g6a^jb=JGVC;g2SSwJ!q{1A)?U z@ZdQ2$YLEC4F_ZrA0l(((85I!hjt*r{cS7G*pKDcZQG0JkD-C7Bx*R+U5Xqm!w#qI zSNvf#GVEbR*#R$vQPeVV(uj>zIp2O`qLEwaH)r@AAt3f{*?;+Bnmw;U zsq?f{MQr^YFu_{*Pg?jbg(yja6|5}dqp3QsM>f$^G|O@kq%9{%`LqNfhvRViMTeft+oUZo9j?nD{%TwuRTK zZ^rVT?|G(j2(f<%#*Xv-S2f4|&!d*B^*`snAP>GTqoXHL=x_3@u{Te|o|o?pzfnbC zk@(pYJ)};M!k%)EX8jSjd_19YeXm5~a6Lhm!g%~p+dB;x8Rm-aODeTAcY+bG9axFG zo4orb2kqBXj2Cfs=Vrr@#%#j-f+_@lscCFU`v2LDo3q0pRU-vtG;Eo>*KRV4fJY0e zpgUR6H*i0;l;G`!Gw2moG{#sF{W;y@;?n{su0wqIYAL-5}4T`>%adRrNf{?@c zTI{Tgvo+z}R9KbK(rbicN&R#vXVD)GUP==(`(GUO+ZnOpsPWXro2pqs<43rsMK^=1 zQuI2{SJ@nq+e0-By?*6gm8&OQm8}vk!VqQ^p?UCCKH_mz@+@N|&Uz*-nb|P+^rOMi z*DN%4i~V)yT6w~zbxL+x;s$Oh*Cox8r6j!cA$w^_`!)PZMoawaJk>T@mdIybFzaER z%lD78oA{$=^ zG;A0#ear<67z+M!O|XW;pWoFuP4G5DRS0yWMSUDA<9HmJg7(G>BYyo zerzw(o8G#Q;tkkKx)hRov6eSjBiHtZ@Gze;OgpOj6ymJtw45FM&Ny7UubWomiA_JZ z@QR6z)+;VFlkxOJVjXjGiDie);%jNSL}pnM zebHs8--MtN%(BDW`+aaGuA)Hh;|SLBiFz;y%Lq%wR1A51p$v4CK1*}0c8?Qr;wbEi z8DZt9?wF`%b7Lo%k>mm1gUfPo*SY^_jfRbd5?3`7S;`rbx|6w0;u^Z6S#0u~*t`LuwOETy6TJrPifS2xS+~wkEnh*zS+1 z6LPe+)6^+uI^`1HD#@a4n^oDW7n(lUFH8hlsjkT_t z3d!L7R0!DWo@(9E;i1g9OHc@A!1*tBWM4PwDuM8q9qps301lvjKG);jKzAeowlZ*m z*qJ+ude*}@v9C-KHpiYl34gN3+p`V+)#)jj)6>4@{AIuOW4eZ8O*sZ3%O}8i3U3b3 z0Ooz&%>ahJKAO-L^+k(-Dzhg&t_s|TS`~^Z(Wp8b<7hoMb6|?*uc&oj z6%Ii22#+HU{#N(YReDdpysVIjl$*kf0M;$o@#W$X;pr?vcxZB{ET04qNj3V$=ua89 zP!au+7xI4w`N0|4OZo#CB{GyCKz-e-6WT;`AU)FiJZZ_2A7Px))iGcVSxA&q)5qH z0{w)9M|~Asb(+!7b?ez{hl+&8%~W>;8m<^Evww!$k*BajcQW!?1+g8xd-zJkb8`dL zf=ZKENjm~v?Bon;TJK5h==Au`^hHI4Py_B2iOsY?Vm*y*%crp-JKfV*i=QZ@vHe*> zDxpJ>Ce~*zB99z+amH_I6&LLUk12$CUn}~>+jA$Xe0mPTN6NtbcVtwCW$nLWi( zMyOu4s!PFkn>2{6ll-Q?dmC8vbr)J~^WPhg`?{l)VD3Nd2haU!Zg>oqbx_Q*8i|7( zo$7=f{eup!K>WY-HBKvuW%X;~w>z`}Z>Fzl7=*~^2QbELj-@63T|_J9^687tQUQcA zh{&x2DB44A{Q)A``$p@#TXkX>QAmPa=9kgnL!zn~(cnqk9i!%A;!*mSLG{aA7cNW_ zW;CJ{xH+#OQS4`}PP3@J^|_`Kw4qNGUIzN=WpXdNyEWMz3yWv0k{NHtrwUK0*w44< zY)gI0zC2F}!6^anZeGrJ?uSCIcODR?pz7*$chhoq$LXls)!n|KyD++Ad)wWy`2gN0 z?cPv#zfw?e!I}AJD;$1k)3JwO21$C+F5HV$69{SI=419snggJ;v+EQ$hA4}@VW@lj zE6^+vCj3iVDs%yb31`xE7K%M%68hgz_gLw+KBPEqdy#Lus5fmd_H7^SP1{R++l4*0 zMQpoNZDUCtpA_*IOje3hYK$CSS5B-PjmwfiEs>WMTeJCqLj}BUGjHz;=A|IHKJAex zWg_$TKH=s;_E~VVFfI4;KN%Ysd61^;4oapR$m1l2f(YHT1%q%eaUI!0gvf0q*?rH#{!X#9x(b!{jCipE+VV`bjFF%h=}UOt zUS@+;yGsmY1t}kXj8O+@1Q%W(_Xm>wx|_Cd8}FMRT%EV zGH_X#g$r>I=SC(mcZ?ff|6dZAFnU;5ETe6I>S2n;^4D73;713tQ^{SH0b;qy8 zTo)+{^lLEJ>92x_1&PaB*EX?(h<$Nd1^%#!Ta#t3oxdw$uICZYkz=lwt-B}YdK~G!VXkjl zu5yf@S&7RmkNM2?c;EJo-n2czw|%`gZBO)VU+b|g%=IL-{a?mhmx=R!^UU=^6Izy) zx%%p!ZXv>q9xeZ;sPgUq2*dGv%z+Y|bpgAp+TCvOD&VZUU~vT$`JDCPGA*ZP zTN-Dbl;f-yF`yDm)vo<-QR{SK|`MQi5-I>x-meWJ4KX)#GY2 z<+MvmD`Q(Eau+*^{bins(#m@S3EZ5y(#mtABjVD^*VzIUP|C5CqXqWv5TKW4} z2*+gV!Fxr&u>a7Avzfbm#ovS}VcP5vR{G9E=!HB>62vNZ*8>$8mE7}l@XDfA&v+n2 z$C#ut-qbiuXQS&Q^1wW&({Dqq;xQ$;Zt_{n1^@U9_NLd^i~R$_*3abAc#tcK6%`6^)H#ovCXf z)pOd7Xz)b=6JegL!4GWKoK%6HZ>os#ac14-u-ja-&?W1P?&qG?Tv5D-DtWZ|>fW`H zl?$8zoY|DA4>5InWT}4y-#(|!TEbg?zG_ivQ1gc%ltQjP<|}p+r|bX0xwx9c^~NiHTnMSVe<(r%*$8 zk7zXyokfMO-i)xU$B6TQbqPDR-74z0VYI1xh^-XiJGY~6vnOEUqyb)K#o=V!ZS1hf zJ%sOeJNF4^RdhuLorAGrDOMpf(k$~(JG0E!r+p#U`?D`+)R+!$iAO!J&5|1IYL^d6ohQ08>Fj@1Ci`{}dRBhOXY*U7i%Z$A!H;!Z#7b*J;xsW$H? z4{H7x+TC$Cu>#=g>ml!y3gLQ>^1&bm_HG?PF{?hGB%)IA>3V#vR*6D4w*uQ34j5c@ z)PZH2TaLJfbY9x`YixYUh&)AFF~L^=Zic|2W|nJB88O$zv^!idE26TvD|A)5$0u@bs|+$(Mv)jj|Mjgc8t zCZ@@-7-15bdg#xBkc6Jd3eP^sDO}%43l!X4a?`}tbVf(D7z2ppqcMTfeML~JB5=XS zr?~I56J((TX-syYYghU+`o8x@`8VZP_!^TRhjm_2K*YB75%yNO*Je$GwLv&lioz$T zV|zC8{xCpM7-!iD126S!DZkoYpK|4>I1wrUN`}g7;~H_fB;3 zyLK>Yr)H?nvlE&vBg3>xCCRIEombf=vaJAtIR6Qw8IfDUb(YY%3%DX!L&(0J7sdP! z|D-jV;UBAW&nLP|xtUzfG&eO;*z5VDvF@@pPOpS|`02dt+m<1>=DI8ssTKmPUx?ot zCK2{p$%K2N1kCS6|4707GUF0~Y++udhGjwn4(8EpcS}sr{rFyq$M;;Asiy@cb0LQD zy&6CAY~CX!rvz^MLyaJ*=H-QDAu}tRac7cSgpyx>ChAJenaMvHcdo_FQBIb&q$B!9 zo(#i!DtG}}8UK(RG0`g~FHBtEjoO|hsibic)g>xF(bpvD%B&u~c`%yn1zdPVo zcdHCYZnU%PqKM~CM-%YAK;>RppG{$w^W(L}ML}X#GzI`^FWi~s4ZNAd^mjolxKZQo z_N)jIkxLB`f+h9r=0kD@x_d;lk#Dx3zmW};YXr^yJO zRORMtN~6+;(QXd|&NW312?g37nfJcODNjlD z&x#reoG2AvStH2_GUO=j>Lz?T@M?AY-o}wXE zCoZ8K5ZBv~hNce|@loC<4mkAZO&NF7RTEnkR^r@zx^GDDEFm6~2Ii?=ktqv5^>m7I ztJ(y@u&@W=?+xiji9tUg%ZkTOFm+nn#5ToH)bOV6L1&G-2Xxr>-& z19NL9IScbY#kE!vm&zg@)xL@W;ClvuO_-$i_09-XZX}Y=fdwv2QUGR z_j4yss0YEnCj{Rg{ALo5&#!2~3tL-Php^iJsYYQ`m3!d@&P&aO{MsKn8Q{*)vY~1y z05TQ*gbs-=K9zo z8ln#_X3*Uk347Q-Xb*)4NZPhzGz4PP91U_;BiTyJbbo&c>1l|&%p~1Fc&0~#GQ)dE zdFVkRjse@hGP$3ks+mB-a#4zSR=GPLuaMwfrE}X=?a^OS?(&HO?cvSM^)1oS1P#?k zXONEJ=tg~XME~Zlo7lwtjC+!7x{xk6Lp0~#*aRI>BW1%$)d0Cb;f4jdD<*c3cXV%e zPAb)@^&pYmEFwqk{o7(Rk7dSVntfD>qkw=dpoGo@`U@ z{xOTQEh8XhniWj@eRqj4zuL7Bax`=+l2yLTlz#L+S5BGOsw++I^~%OhY+oz6OCY_q znM0zLwyBT$k7?`>SWdnP(s;0Y>LE0VLGDi(!sK=(P3y)@pp`?X+7%j}p6s5zZlZL} z8u$2)dM&HQ$zTQ2-g+I+Llm|!(^B76_#U5_sf{+w3M9Tt6yBwCUg zRxoYP&K|J&IqiL(@>7rHPBrKY-xAu2?z~>n1zAf9E?qk?JnS^%n1$`I5#+X5ryZiW1u5^gLFos<+(#f?&Kfx`JS?(=msjmF_F)Ckk?B%sLAeIOeB2@-lV zpPsCS87~MkR&4CIf=J}2tFr{ycQz$yv-;Yc1`*0n29q0#HRmI0+%uF~mRe}b%3ENr zO7zBa&EsWEy!b*MlreENB1Je4`*Xe$#&izHQ}{R&WsP-VlYX*;9e6({<&N7TZfq-N z5XnN!s~(y!7PL!fxq{z=9Xk}DfW=~z*>)!Wmbu4Ryfy*sALKbhwok|r7jJI1gYo0x1F<0KVLI6`YC$0l zVBsQnjU{@^xJ5g9VF(u!E8{hO5*#IzHa`{~a_;1OFpER%>ptB~+r+Khg&cJEV%r|b zyX&|+FOUVr-Ln`ny$(lHE|`c5K>t{P_h}Z`$;Sd%IkRpcR|^1{2nMfVvs^gnMU_u7Nkw@Z;UE$s`PaR>e-c>XKI?72<>t6 zE86+;Gq-Jf6Wraq`E5_PuONe?cM(4dGmYG_X?aqK8vetUjZvVg3%ZboG9DZ2sd@E z;h~I}?0gZ&xXdCn`r}&yjm|lI)L!{9KGQ8o?c}+^VN}NB^Qqbuczk9SF}vXLd0b;c z-hk{kYh3-@m$!Jw(xmQQgDLn6y{5q9b4j_^JZY~HS4YIKf;MMSS;Y31fFQp3kY`&k zEFVM9$7G z>UT-x&P`9{Eo!$bGN}|^UwXmF)UieL(&kUO+cd4nT{gd>l4Lb)o^%4rD~N}(jR|Ug zK^yDjF6*QmHKD(McU=how9U9vW@i)f9lL-`@Rph}-)E&$rz{+Sl=7ynh&U4tuRc5* zOEXl#J>iolwlf~Sm@HE%t0h{O;PgK1d&-XZWK}t$*dUrv(**~;mc_HyY{nTgSE7bICdxV zh-?_{8Ci4ovVEyVnmv)E+9IEj?kD1ukLGrLFYLmu=nzE!xRY^&SQ2p@>ifA5beF3q zan;TWa`jh!=hE$^^Zl9MPMkx(hD2I|&`HS{97erXut` z#9^FAyQG&8obMb9w?ZmSH3poVxh<9lt^2H$yLBulK4>(wfg{`4Ut_e^0qm&H52Dm2 zBSuHprQC0tqO0lTo};@MS3id+&2P6mP{>BWSi&vawr;4T|AXWQjE@IrKLyv?Xls-w zMigieem#5ubX?e1oj^~aDfFm9e2PKY0m?~8P;05>Mwu)qfAt|jE$|x1`+N#Y# zhHj585d>!nf?l|`9sf5<#^gazTy7-_fKU;}szR@6{rM~blH$<}+*NoKvsn@tH(A$= zgvp8(Y6z^O1ynKvIP4GkvJU%N7f3K8J;Eyh>JRr-Ah*Zfoy)-?YMYmtpb^)o@H{Uy zL8i<4X^|k^rF>K?B(iXHDDzC-)WW8|Q%CJ4qAMLt<~-LmxG9>*cQ~cKd(kakZw7o2 znXeAk7GIt2aYhbix&HxQSkv7z14VAYuF(poVsGUz?V21?9(7?f;*Wf5(Sc=m$3M`_ zSNdVJ>bB8_?v5F()OR^gusx9jHq^j;7i}lrJJMYP$WeJlNl2RW4^eGxl~~~gKLj@s z48V5N3?|1=?xbD49}5H)H=nCwKXcyjKQbeDmj4N+!AMBcO>;HvKgOH1S1G=E^!|c;ML!f+GED&yQ$z zc;vbGkym>62-3!JW97ePnnT@et*z+RDlCA_C~GkYYF; z9-ucvcNe!Mnp22wo+ zb*(Lrd@$g{WmD)g9?|}AooMgVD2mLoz5sGpyE%7Pu#1gWRJ-%QBIk(#h9S#i+$rrQ z&AB+9Ai&zWyVzo|q}BKi+UlQ(qZD9HAc;$UEw=KxG z03lkztw=x#k4X#NDD8gV7_Fkw$vxo)wfkNPsA8nY=M7FBxtZIfrejiLe>z9r+Q3?# zEM_g2k8Sa+MH9blLgj{5qzzG0?-s>kBz$cl8->^CFtc#sUg-InX~$k&$L$LQY0|*^ zh$|Bz_7syYR&9YT025#-nk8pK0+gtZ+&i3?DV<}rL2jTAmvG;0Bwg>18t`%dD1MOX zlXU~IMx^>wXM7{UA(R@}W@<(^w_vN2HBbXs!D3bjbGdF}CqEYA)LSX7!~0=L$oqL2 z>*b%96T!WL0~7xEiGW!LOr}|Gf$K$>zvl2TLu4AX(!R7rVrWP~J&nx|4SQ#DXv!jw z$nxbe5%YoMf6em?x0LU zO84D)4Dv8E#Q(GsL**et8z7RcNIUDzoJ7gWEmKL_1*fx^$*gXlA++TIFl2uE%lh5t zbo<+z<#M_;ub-UlZM$l=`5E1Qj?+cs*bNv~xtrcB&gk|>_sO&#GrIjTKcm~?uK|`b z3&Apb*V15lY`yNm@_AXX%v&!BmiJ48<=h-t-YNl>?cKefCo4TuIT5ps?( z2UBWqjvC@lO#MKA#z!ma1CEkrw-4k@uzTwgTm0bSN<>e~y#;lN3GcnTYt5Xy19gYZ z@c0{$<$kX142TsdzvzvCexINKif@Sg)QAwG8iYcr9lOQ>ovR6qLej=Cx1%bh;{9~ytYw&vGvbhHw&6;185ellgb><&<}IJH3{fx z0R?kMW4*Wb&O#PWYb)*IUYe4^GeSS(C`*eEavnJUW1wu z#$%#0Ks}%R;B&`emuJ8!_vF*$Tb7FKUhfxMcMfxHOisgaU+vnA*;zyxvG#Vk`7jbU zbhMa}cu(T(FQTHXhqL$L?uj1(;sr&h8SXBWyB|{y&OVK9JdXXD{Npp?*N{Z8(K}a*W`&7=nM_ z&C5sdYYPxukW9JR>o$7Zj(cLaCdG`})mgeK(B04#BckU1KJSPZ>Gg7pL zvS|NI4(;FA%~OQ4*7azga&*?mfmD1Ojn#-ZUnR)d7Le5NdJLPxOwe<8@5bu!rd{0A zYiCIRt^MFv#e3IT7XD+QBR99vzwFkvQ{<@p;8?A+WcezYzKDtDB;7wgM(nI}7af;s zX{5{CPoJUkbKTC%P}y-Jy|BlKqLr_;s1l!|Z+<|6LMR?q5*o@LowQpAOn(d7kuoyL5WWbKfz%FvFwhMV=9;y@U;@GMS$8A1#Sh6!A(5JhuE-tTVpFQbS&Q zV#6-my>@p?SHwy+J&R&RR7WM zY-(pGMJ5TD+REt7yXz3XB(53jG&6G0=eTz&I6>lXC$l}C6W(-b7;!Gw<452JeYL%l zNcFf_pyF7Y$abxIi-%ason?fyn@o@R;m@6%5JR@jcQ{!h)m8A~mlasC0@r(Yc7ku6 zq4EOB6%@I}y8H4FMx78@n`xI2Sw9;hh}XEO2L+M!^C5X6>rDp*krm(JvqQdNnf0-Q zv?V38UdSk+7L!-X%B;O4wn?EPCbsW-Vp}9xlp?l0h!r{u@J|sdJk@R3Zz2HepD1kP?6O)l&&Q=G5sBN@=+ zbI_r?PnN&Cj|;oolo*T6!)PVO4Z%Nu2{ZW?z^`Lx3}k1tDiNCd;#o!_IRQLh0kEy_ zK1i%WcUi~^j$?Du?Q;#|SC+@aaA9z?hCYcx)CWgh^L}ljUoazmAT{a3>u&bVJ$I-H zP< zXGRAqP0A2}$}epx&8d}3z_s{OW;fKe*t7Efi1U_d+v(e$+MBjZeA`oc)AnWG_T+-L z7Z;6}1%E|t6UWVS3Aosn=i~57?8{~S+S>$BO5N%1y##2>6vvqo_nGjm9>|Rmv|FNj zeKbZ#wU7rYvl))i_dvr>eV`^1X3AYzFjqo@jI+wXoL5Ad%Op_rl3`IXM2W^zQf>i= z#E9-97?(hg?viwwISdStd(GrPMTrbH3~7u;1x(Rt5p0Fg#{RedDiY5u$-KwAkd#++=uBu;TS`zg8}+X0+l+ zheC3V-uNtTlpftBP;H7OToZcFg3?(cYOGF4WmfmOvF0(8?797dZ{P4Ser3{Hw%k~j z?dm=9Df67xai(@cwOd*YnlG}mMiI0G8y^-o`Y79oAW6FW6FwgId2zdUbL~dxz`yEb zkehMRClyL}EYnGidl1vM6s=8jQg~1x#TVBPjvhUBIt7hJL!jTfi>-IF2aE3sXJYR>QtFRgXw;cl89*4_oUOf9b%M^h=jjMi zy9ft(SEJrhX+3x02_3azaOwSw3vC97x8!Q#-2T*}esl&9JpqH1#ozqcy{sOgYE+R8 zs^MSlp_0}dZ+W^g-4YCAU+}O^^Dh64XCZ0#SFYolRpgjrDid)B*s)YSLe_AW`C6%p z%=`IC6Md9V8z!QgwzdJ)vUHvz^*A7=q&0;j7mTNj($}Ui_V1Y~iI>k41Xx)Mj_Y_N z7}?~WUKZOr3f#pyL4a`P%N@=vf;~m8<=1%C4>F_L-h7f* z4baVb1cM4lRZlhC-PwxjeouzQM8E6L%LlO2!=ae?G>7ycEl=k&lu-||vW?2&eoB&R{JKo3}% zOSO*icKGbE+;-4T&9hsDD9{H35Us3Ah78kX= zoOTioT>}XqOyz;1smNf$RAz^%M162zy00FsXiu7t%=0L^00Lj8mN^gHIkyR)-D_t- z&8rsK78{MPlRb8fPPA%|4RN!XM3q~h!?elGl+JXCVm-s$(jE1(Z_yg#*ENa(q5cNJ z3+eaROEXU^j-HJ}Oc>N=NkyNWA0GSl z**_wyG%EBaDEuT@wQxz0tlC}k9-y;Bu!ATV5@n8y2BF7qJGyfH8ba{gU4O}@G~>7r zPmEAC7_H-`CfK2c4AMHLa8umk; zp@g>frE*YEKsg%e<{>u;+#&>i{WC(8n1@+>*z8H8YVv;*BVms!aolv#9Q>|J=O@gl>Jw^6d#;l>3Ai z<^eUTI#EYgiSn=*&C6~;QfWnCmIt@5jDjoGT9w?L8=@`iqj3bZwAG`gy7Pt9WR;J$ zX^pnFeYHJ0Mfr^t>|AQlTOHZ*f?TOxCmops`b4#A8|*+IJGMkSG)5<-T3V&Qn#BISALG$dqo2}OI4Ni=NA#0XaCX@^J2j+7 zMDWPvW2E>s)*{L4dFz=YyvX!w@vXB)WYZ13!`(c{3!QoTB+wb}`Ebv)UDv)GT`~8` zaCgcGnSZ^&c@vwrtV>5-5kGsXx)Pe@JAEcdTt|uWjaA9E^`d`7# z8rd3cFe_SbOEJUiDxv9~JiqZvhErZKw7lIOCl&>n=JoIdM^^Al8oE3dZoTGjd6lwk zv^DtkYNu(8cMQYsOg>mHdk%xw8G#ktJm?!}O?hp=2_s(N7=BrRjl{S; zwB^Mqe434!3&5J()-e_@t9)i51XJt)%o4#Qarju#$+hT{P}MCOq6X+>eJG3f6upr3 zDahc%UB_ymHZ<#!%CaQ+9%=FP&o2GMcB$tr=}yFAokV0L9iyA-JB`sDdm+(;a)r(= zT<&ld?Ez3iT9=tHcHwj*qMd*+**G90scPb`b#dxG*}QU?BLeF?)mYz}Y4^@ZG?XB> zpHcWSAuoNs!pl}p6K9K2keFK&fZ)K@ZfqEYtnRgFGYe6Wg2ckx(H-UgR}891utvKU zNDqLCCzd3VhLC8fzw_nZ!ISzR(Pi?{aYF9cwyJ5qwXzry++K+m{e zB{1q(%MkbFDJ)`E_zI`tbq*O33*OU))Zo5a3Nmc!A2C>6yLS>fz;r=iRcMlettDMZ zl^YqPkvP^{&~CO29waRp+$@Oc*6LPUFXL7;%~cYKc8+G>C{Xkr6s<6bzAn}=cA$r5 z;xo+E)l-7rVrG5wXE^n2)qRBCRq4vn21y0s!)dCpE;Dkp+uOBglr!VI?m9vnhjBZj zs9SiZZ`n|`rH`xgo<@P-4gBAMJo=9q9K)|5z$-GQ>L))zsPiWW3E8q?l~QO4Cs#X zXKM9bXO2>>C;^QAb_o)&-Cxm|tRrdyfSQavfviu}}9&$;?B)=MHbl z>=BH|HST6E=8;kTc4y`h!*AjJe0DX1%dOwiNxVAesU+aAt7qkr!uaah&^tTNl}GO^ z+Iw&J{A$DlGcEI)+9;+wQ&m7$c9X8<=<8s&r#Z8Y7+_v8id2pm zL~fH*L3^T0LZjdLLjFSiYZ{APnib@)59!w%~_YH4kZAiblA7XITkdXfkw!V;E-4j0Q zi~wtN{_yVJdsfN!E(z~Ff4^4TH{?a~xeXZ;Btw zx8AcYI%2=J=->Bhi+)WqNmHPocAju~X)QsbK*mY$k`ICH(pVpI6Ih&zl3u#470x$% zVlfI2cP%4iM9sLR`?i@58o688ETM--*(5%9*6-cik*TKEXiCaWIy%+Kkz4nP!;t>H z>CvW*(eGN?NJae7pBvqX&Q5LaN5H6R_hRw3`%7Zm)kKFP|I*396oB-4#y6)f~BUSOjpvl$JEoe7_= zhBLs7s7hvIhNE0VRfNxo35WEyt;U(#PhflKDqf6>K9t#_sL#p0?-SO4Nu4RMs#PjQ zwmSV2i(6iIe6*n=Kwq<$4LmsNzk4)r!>Iqaqk&_h{xXrs|AD9_HGQh>29=GRZr{kx zbuK@)Gs$98bW>XO4_Th8(-)aNXrpbStv8Q|UaTfsWFr;$#qxfxX4luf_F+Y*%+d%S ztl!z?r@U9Kj)nJiaCcd;fytbSq+wM`1~hE0AewJ%yjht&hqyBbbtk_Y`rP!eNt^xM z{OhIi!;4<~jh4L5-LDX)JmxAF1f#x_mG&;V)680^bmE!=CW8+y?Ra{G@;=Pw1-8iC!wR5MDw0Rj& z2;}i7v=akOpwQ_;94;-f&y_Mq^F78N0?L#4^BcpTA@xxK3XN~loIg7r6hdK?(rOFw z9qh2|!JHizW3)h9EtL@^&=^*5-kAzH&>c|^2_z@iFeRTJFVP(d63uewVZSCgQLwkcuplmJE-Qb6)w0~5(|FXTDIT}2}Jv74_t$d zXoSY|8Sr#Pw+XHLvZMI?(klGkr9B$^3-8wH1I0pUNekTPQ3mQ9rSsf{xiEM9g}3Oi zLR9N5Q>Q^u^Crv)Blr3mUYtE^FLduexX;;1sMOcPiX&qI&Pf$%EiP$0WNNw6omqYkc{T>pE zrJy|h&j1_rTm&!eOYzu4+!8@|b9erS#JF!tBviEw?wcYqMFR%B8&$s_ZA!LC=5Xqt zZH8T_2JSY&QR=}V5)JR~f}-YoFnOisV$Xt~Z?SK3zRdmUU=c}Ipuu9t?*(U3olaXb z^%{5C36}k2Q}@b;7--gW;}Pc5V*x*R>)dn=IA(=TZM;nc!{aGyqQ(rWm3vJLum71~ z!vWw5SsPd!y7>cwDob}LH{)0wch=^@3AGBRKagt7+M+~^o90@Ak8L<#LL$8xj6&X- zE!_(mKq4gO9E~rBSSDqW^+uw(dr57>JdE|^+A&~peHtxJG&&_aSxJA~XB#dRRL~re z8DuNLDlUI!rJFW#u0GqM5&FRVD{p5dIT`FHV@m%v$N{~|!!(^$$0mZaR$D5UhpArq zZcNrNvVZEno`XGZ)2?HPdyr&IQ&<%m9OimLK1`Tv0LZ(3u4V;H!0_0j_5n8U`}XOv z2L|NKm7DEIn_r-@5&4w~YK_ZRKxxWHEE=KOJJZV?%rcYu6tmSRiT{#Q11_7F# z_>oqzZi-HuWIBw1AMV32)Mpt3Ho)ZRp9)?4K{YUl^lR)aMb(s0O}O>vkOmG4DG43i zc-qh3##)R(ievPu9caSr{mO*dmkCw!&vc0hdqN!NmWuk{#>&4Bxj-@gy z)1W?31{fM<+-WCFlqr8z_YPgNCB1tr?0_VwA+FEjtU)iW8`x8mAOPM3(@3>pC!E7$LnZp1rlgPVKEz4j(yFvlukNRz9?%%w$h*%(vjSeu zeRTw_H4di#P#l6idO84+z-2nA@RpmuuSaB*4AmJwp zN~3OIggAV3$nwFh={5sy*^SQJ4G+El_8XhI!^tzN!>yVcoSN}cGUXO9i^aFWv)AQh zQDPGxZAW%U=A(2-eMK@XOb18HPDPI(?CnWvacBzWbWj(}UlsPsWrgS2<*PDMZ|yx2 zb3wjgAz(rhFK=>>nn6H_sG-3hHO6`bh$Ag)IZ|;xN}A7UtI^TV$t>*M9twLT4p{z> zG49Ct+BRGRYY%KLfwk7h+Vs&F_tEyRKE4J#v`xP*OqZ_@aARfX5d@5#tZ}Tv!V9_D z^<%U-nZFRZlNutDI$X#2%59=XU~_trCF7Es_ZR%U_Mz* zc+k6NbMN~$8$Cs-5NN^k|7lwqih2}{lXTUVYfZ+wqk5Yx5_PyjrTT;vQQ0a>Ybos8 zoq_U_4MsLa1BvS-!Zp@&AMAj#FYQ9Z8RgzBp$%ZF!Sy={bzl?T7!(JjkX%qk_t#o6 z7uB0zNA0X8L^#Y{w*#2~`jaxzkyM{=av~iv9v8#T3^&j6d1(KQYI-T$;xdO(#Xa+9GO})HC#dSCFpCKo58wuu zdSfvRrN%u?jv>6O8*n$;GumJd(;SOk{-`MW6?QQ<)yHoj!;h1Q_w*ktarX_TF+VKj zy3VB~unwz3j+@gxG7T+BR#oDe0yYVAtMc}uk*eLtJMwv=-S044(dR38QFPjgrbxsp z-&-F9S^hMCy_AgU6^#E7UNm?c2Dl;xV`f@46#(HU71_;-+CfbSVmtmINz@G|f(>h@ zw;&^@C{bBH=}YW2NhSgkF$2UR{+qn#ob6DLt=dDPAijG`D)mq3_n$oMe|6u@n)VJj z#_g5|WlDE1*{>5#=6%?;0-;l?w#pZUDi4eXD7)C?XaH#EW0yH=Xl@Rq$}_Nz45Yro zRxR?|9)(iGgNC4lX{BqA0aNqZLV*WBqcM1LD4lGe|DQcT6x^~+y5|R?^vVWxFFfna z)&9%4Hah|Gz2q3GCubr+N4xyjDlHRg_I{Nt%!8OPVxTG4SL>#esfpcnMP)*@QWU+L zyiO}g0smAvK2>>C4NS5h@`7xn>^=mC?E0{IhO(XTp{&!%UV2Je7{PAo9db=h8&lkb zD}VW)*J6(zN1AM5zKKtFhZlO~9u2;kQjjX59LI&G-#GFN4D*fyIX`F;!woPL&V34o?6H$|rZ63AA&nc2pq z^&6ie7431LFd-JiaXEKny_ZE$+~y2zN_T|7#nqtrpg1pobe}w#3gLMWQD|qTQplF( zhw3I5J@p+im&K-0i9PQiMVT%1PddPSG)p=o)z(Il<-h#7vCX#E-w`~k-P^^+2^(;} z#`$xeU%NhGk!bCeH9@kX7@2HHS?xJ%)##l?;$MB_TX|x5$o%$oVY+;M{L3O?78k?p z|8W)xs*h;&3z3}~|)KF#-A_s1WM;k_k^RY?ZCdCpe60Crj`T=g?rZGUA)!Y>c z&4V>z`5w?&=+j%XppQ4D6BGLYSO%;?vLstfP3croZ3;ZZ2#gr0-;PEfyTAXIF4GK*ul9>vGf&Y~a%Si)8 zlj(g!lde1(v-#{Kb?OoXvOZE^qkXHL&-ykb6 z_}7a{uzmA=AQrB8~+VnCQAr%1!Q6+cPAEs zEIxU(vNgsc_gBQx)tfOB{}odJqyfiLt-FwmaeFo7fAe@L*we2QM8o}slrGeo`-xnk zS7&`wTLb2XWK9=!{-{J-g1#oqMLkgbiT8bRW>CSkh_oCbu5(9l(8vq9!4o#L$%ctP z+HQ2^Oyldh6`L#9v)IO3!fR^X)ZCEm8TC--Hfg2ro$GPrLmR)_ta+@(4Ss~PPCD7p z;Ez9$@s!h4f3uP1_DPIv?WJ%{{b13Tckg%0(jbR>WqQbO&{q74WoS?q?}0VuCK&q- z-^K&_WYqtO%KMXAou-aAzl7>rnv9R@ExrHW)vyOLo|{bX8&V^f*oB{gWw?V;q8^do z2INdvZcrnK(1WH_0scRx-NT3whx3(EsX|{xfmFFmR;^qNqGsAHe_rd};t*M@_Te5C z9a&xd;#NMFT-GYG2z9HX|2N*|tX+3Q>+S6Xd^v5Y@*1tGQR>TUSO#v$!mB#r*Vld9 z6QdZ^1Kb1aG?_eQO7080r*PBJ!E$@DPS9&YPc zoVx>1RJ)6?dL%76+<1<-;97UWk-Cv%uG*}M5`no^i?ha@lZ`yRJhLQ!82+X#ixlp1 z&O`1(kGw&lctQ12s@tsNF;i@3NqP+&4p@#6@`o=c-b39TfYDASUU&WT9 zXNE_7>?_n}XGXqyRl1=$?WQ1vCT+W0f;xq^T^bO=5f7fI+C=#+H-$)zh7sLPBr5|q zQ4eW+y||QiDycA>l5^pzzD_v+%hkAwC!ix&MfJC)Gz#W#t>MXqe)w;Ek#I}`z3wg< z!#sV@SXT`-gU#a`*b1_vbB5ItxEuzX> zEhAN?C}MN(NHXQhYHVgPMHXGA=Bl@5eaFZzXY7R)?U!b!Q@3vAv$g5e%C@5c#+xtr6Z73d~bj|RGiMDkRoa+TD{}@ z2(GAex2;F|MDhECW?|BTZ=N2YQ<~5G1ep)PC_)t*G)LV_|g{O?F7#V|Iqq=i^riLEDmgh3% zl-Sjod!7c1j!N*sa_Fe#CEsS`-XAI5V0mz40tuY6K%nTX zqDY~eRCXo0*Yle0>XF6}?Py`woPH=fkB8r0%S>}BaKD+G2FrsJxVOlLU%p^zefD%G zGW&8BER9DZu2b})TrpQLCL1mdO)6rilFu*_Uq+7i&GT1_&GO5myR(~W z;o6j$7Gl)75R1$$u;$axIFt%~c!M+V(vE(Z?uf=ofcgXJezPe&W?`F6#AJWT6B|KB z$eQ^rj3{o_e>M@Ct>2G*3pvPL{hx4iM~J7T+N0M$db4lJ{pCCD{2Y8_l-d;w!{EL6 zq_52FzCMi(ASsO!6jpYpXa~z!l+{3dmD-`{Cvr;3bTd1CGnWo7?rS+O^}U*9)2S%V z_SqrcgQ5ZYWM=lWA$@|J+EUfWh`wS1um-n3JrO8iw4L}Uze&|gnsV%uO>9Q zizmUrVXAk1HG!R5n@zzIZA{h!Ba*SbrIB=aBu%7$pFc@`$Ocny7ME~sbIwz$ySAkj zyghf!JW5Xk$NU*{&ijL-?Wbawly73dG&;OcW7nP_oeRu zFYLs~o^%w?&)#|!Z_N?F+<6gVuou#jGx3sH`nr3to(Noa_!SV(_yvo_l^1QGb#DI8 zv!mzg>Bo7k1it0q1GX=Jcl z52n#z4j%|0D;ri20Wy%VZOvh=JygxQ4;gINJ}ep~H&EsGSE;2yyn6OIvZM6W+Gx~Z zo)*75f3UoHsSG&`D%&e-01c$_`Nt=qkd-)tKGs=ASP2y8s{hP|WQ_7TWzxFO!Aue*!(qoZL>1S*p6+9rDU;}aUm>_v7j zx*TRLxMyV7EuBOj22uKxZ3*MUC|zOQ|5A2g{ZW)dK{$WZ{f1vy5ekWj8>qT*E_13! z4qm;M`v{yXzyUYFD~R1ukuq?l%Ra7sgU${nbu#E=8sM7;Hu{E(z=y?JAl>9S=klQ1EKo#hWEs2$~!@{;xpKyixSGRj-!wyQU(3s@A~)iWt~J-aeG0ZR1lB@;7b z!@)Lm->`Ow`XdK4aNYe*8GuNw6c|{vk>_4eJa+|1Tvm`6g=)m~I{6yU4hofKwU-fGsoQXkluq&%st?gE<+}~);ku7SnHV;5} z2)tf5e8ag09Uf%o>=2gsH6MFqR*SfCYql}+a$e)P(%`<4#ssny^=u=w-~fs598%tF zbhNhD#W}srrFG*UJSzqrrGK2Ahv^U_@Pcz4pxnTTBTi3}k#B^mlr~0B=*HvF6$jDa z4lJ15PWIO_f>c$`x3m(GyN0qlEVOfvJpx;!DJgUsqeJ-Iqm|`fxh2!thB0<+cfzpB zwNlXrZe=+X-F{8Q0N=n-Hg8?`M}OF+ab*ta?u%kl8iq7xng02Wn-jx$Ph&0v?RfC* z9)l83Ss1%LWnvxJWvdha$ga*d`K#l7Be{p;)$G;M{_EkAdja!dnZ3{pfR%liNZfZ* z?jHxp8b@$dgU==$SM5RrSt(j^W1+<{!z|f!5iWo`^}^*M-05yqWfAWG_CtyN+Iv9c z9)fm}HReF&E_YW?Y=Mj^hGWY*_>A~TBWX6%6;+ipUP)ExpSu#HgSgZstImZvE#1F? z2JZJUPxE|fog7O$&H}#*SlU?$mi9Mz-q&Sm5Oa|2|2Ru~48|U_w1>sg7HOd#4J=K@ zuYS@iYupitXYl;W+X6#7`TD@n-hVhSv^{wGFdq12U}zo9#?W5<7ekAA*uNOs^0O5T zpUeMnS)K$=iwblrK9qeJhW0jTpnGO$FZ_$4i9wWy^f$nybG&I8-jsXD7}~|Kg#A#^ zvJ7qG978+P7}|)p14Fy+ccPPNw=yoUGgIz2#>x)PnHOuL`oPW<4QFty{PYMh;B zm^*JNv{^PhtEy~yUS#a8c3WVdqx|sdHKwLqfT_~d^K-YSdD0yca3hOvo5ig@{L_Nh+MyZl{`ubD2GSI!gv|_Yx*`>6nL(3idr5o1e5{Y#316oa#)aJAq@B;Oge83;7DNPEfMe+zGO;4K({&)StpTn9n$%$KYovg(8b+W;OE{k*JX3 z6X_Z0{_WA6l)HTTMDI)9xQvd#6uw%Dt4UKxH>F!N3v%q*EEXkZG4G!+3sRK#I12{D zG_GeFk}!||dj&fczXb&eNZE9Zwgi{IdWvMby4uFYsk(So%Jmh3x@%t`nQm2`Wy?(u z=;Ts={T!cO!Y@iMfqC-RQ~`0hL;9poi7fek#yvD41ws0?yHoGRsx~xxz;mwfyPO4H z^%z>Mz(Lwwcr{k&XoS1xTOfX2UF{(J3%o?A-e3f41?ZNH6MmUx``F&D3qL@J@rs*s z=aIFG9V6SAduq`H*{b`wE3Rhua`e$?&7+ItV@eVmZp}0s8Zc8eD*)|NC!bAcOw>A_ zb%@HDl%4!&CV!76&lv80x1wt~XYxy%iPALuQ)WUvO=4+)iEM8qR|J@fO3FYg@~@=a zI|^?nRPV9zowV)e`i{mMGrj>7vkI{0+RQ7sI!{BFmw0uGtXk~a|6}h>z~ro|eeddQ ztLZ=@Bps9hVuIqqBLos=5)MNK$Q+UY4RS3z-PK8(?&`L?x|5&;38Mqj0h}1Zq=*=m zqd1%>DjtV0I71LbnF2>a83G~*>i7Gvz4u#hRabSIoO8eDx!-qrG+kBie)q8Un%CNE zTNnnW|MDY}1_Xylb&|t(#J=N@0UWAX0$<-yx?#0XynX_goAGC7`l`z{tP?V|5DlSb z2tZk{OMZ68jlR!meDjs$DWYR_dG>Zs{cUKevma6i0=P$)B}poB?~K2D^cx>y*Q;KC zb-Iv&ONgfvcljrHGfQz!$12`#SCOW#nYN2YVc3Rb|FIzOWFa%}PS($3-G3~Q6PG)( zel)o$RsQ_Dv@XL)p)If7K3V+AKH^a2Lakl!x4Ay!|09dQ)64j4Rg9?YF6!@RHd{c^ zabKQqc_I_f;dls}M22VJ$V=dF_Y+QiSdu*413*pj=R0 za()au_Eut_#6yKCns6IhE3)tzZQz*3CKKm&8t1X|&Y9NO$o;8YPqCo#0^_-*8@fbz z+|ZS}!1z6=MtQoo3yk5p15DPnD=!uKE#e;|xa}=q>e>+4K#C*yj}&4g-=30O@&nO7 z0laX7>FLJZMiG`>Ee7^hJvs5YaDi%*E`;7gJg0(F^)fnjULJu%ndY#IivGQksqDdA z(-&oJ%znUe*^8;gPHZ!oM|Lzhw^#Ya`s>Jus*L7L>nOYIqK`_GVI@`Xgsof=VDE8n zH5v1X*D}!Au%)F6;S4D)8ze2)fd|8pmei6adQ_5@EWAsxNms*rSg|A<~cY?1KD{C=S-TEJ=(O|&sSa=?t9g?UNrJw5Hhfyi89ZGFKPE7G zw%E;Jc%fYFjC|c`wTG8+kk>q%#<=qZrvSm>z{@xgoPI|^ror4RfY7Mj&*dfUnY-Y_ z%w+F#Z89OJ?&X)t_wB=iPyM*;_@im{Z9X=(3H-SE*CN90y7n-!3SBU%IP&bp*2NyM zowK+a<^*o20dg;&Eo}F|z5*h6`orf4+-OK`*(>Uziew>ELHy8hsK2pd$Nk3J(W>_K zw}tOie?9DK+(}ukW6_1nW9l1E<--}$nBV2@{S4#7c9nA1aAtOo?(E3xvU_}pNgSh| zy%BV#sWPOW-5P$lOxW7QUAyj@CxOT^UY4muR^EX6!wdf8+6`Rt=PvyW%|iF;Qmdlr z6O}!Wc;}l!*I)KsujDQXbzKNuOGUvDe(Xx?ue#B{=ZO8sA(kgd%KuXL4I$+fj~N%l z@L1EQ{uRFmYJ}kppkCkQW0%iyr$#V#zf*{ED=~I|Fop|Jefa`zI{nc)0S(W70v|04 z3!20mej@)GochY&nZaJ}hudw7rgN*>#@rBG5AT7rf_{n!<4&9r99B*^K4}{7u3-7g z1Iuqho+y(JoY{vy^akkRHi|ng=`5$ZR z^r`kg*|8O>^(5(EU%QICsiOY1RXbSj%3!Dd_&94n(uQHj^cM*<&?E)$)~o8U=5cK7 zE*g`Q05=CB@S-|*m-hFPx)-*A%I>s8A-FJ+bqlk59|7o0jHd*4nL==ejXIER4x^i5 zAUQFLLEaM{=EK9CxZDeiftl^(S~-F@Y@NXjiqsV9Nl`+xx$tUHO3-XjP1)uvNcG}HcXDFs$Zw`4+>D+N+nhA^RrR0=jpDR@lSG}>J(i4V$fW}m!8Qkq5_H5M(? zJpms3|Hz&?YcnlBUZds1NlOxa(IEz|r^iYi;_`GD!An`p2Dp^ z5-9cVW3$9$M!Oe}l4-l%`bqs2r#%3ds!vKfcUC$3+0|Wev=nNTiJ3C(;4K#%jmypb zUe{DdSJlYVC8aTv#InKrDt;<5C|$=C?krL+o`I24jO&ovCJ0sOH+-Go>RS}hn_!o zwQg9J=>l=@JkWR^eDtf2X|dx>DF&A*A}*0f4@HuCBpvqWs^o@=**UWT!~as=qt5c^ zR%>NN`n=0UMpiEgMd%4YDZL9B@L_P;9{r{CNH9cGyA7Zu*R3d>iRQnG&0ie4xi*Wt ze6KiK%Ed^XuG`l={G#78{eY!CTAHQ1?4ufGBf~xOVrI@dGVAS^F6rVdV1m4mvV14H zZ>e+zqCxq!6YC$hNnfQK)RQ^NtG&Cs?Pwk9AaiyueIQuubwLRwU_X8e0JEO`=KX}t ziyA5Wv&r^-to!jyE&6Swz#WZyOO6pJ%B?9fI=QBe*@^aVBd{8IsgyyE7QXZlb8K`U zxe+(I+$j^>3;IQfDq}MEQgvDMWjr?*31*i`&xRF2)3}pxZT*OM!L77Q^mhJ@fatwp zF@DBBoQZ0Y)~n>vAe;IdHg!n$F2msi_(7hz_0YY+>pz92>GzaZ$CAIvJ{h7I(pl4W zvuJ9VLIa`0p!-z??uqs82f%x$68R46o&PMo^P%mIgSk6n+5m1+Z3m)p1Fm~h7|i?x zDL?jTh7$wZ$9ndx0;{uir-OQAs3bU4G`et`xT=Q>;t(E|N&A3q@!`HKibj_pZ3#<5 z0T;l*wRP}DPI~)4DC%aUg3CyKX5U+zTrID zo6C2KvBWFDqJmD{yAXpI!-^=~XjCu|X@6M0%!kwx|`Yw*G-#YbWI!WpEtmfZw$AgZAOfJSYm89_t%Fq+_^$H-oCdm;#p`# z?&XKLHImw1_zxT1#a`kKP>Hn;@_6kb;%0=rkV70ed&7u&cfavtKTa4dJKOyf=z?-T zdz=Uygn*sCZk^}fk3YJ0PJI)R7A}W3mVm5&@aS#f=}j|9;$By8|B&s?c~LyDoB4-( zEcK&S@@0$;G(OB@33IuevYgxGbg+VG1dGQJt(Io7EAdbLB$>$sbQ|*&<6a1^XGng9 zgTiGS2obvVoW&hif3CfjMK9SBUsj^k-){n1H#6|L@78UaDA?oL`0hHmpdB?h`aj?r z_Fr~p;s+@mnZgnB829%o79&px$~b!17+pO(*6oaeiD9Uvy=B$DogQ#9j9%R5ZDsB~YZ3;u`tb>^`!C-8E5LM%}$T%ue0yq26GGcLDbo z|Fm|U`v0)+Uoa1nHgPgt7=AD(6TFZv|1h{qItX3+154=`JyU?$IWrIR9xa z$1U}Z-oMNbU;UH!WZfNm2br}k7+79Yuz3^U%+}u!e!0u`U3VI}n>0#ufCZz_i$?jn zABAsWl&^(R?i&6m9=mLm&sU5>FB;_=q0>7xOu*kEopA4nm}^eBby~p9>8?fF?A`fg z{Z(S_u4f8qHwI~K!DfE=ji-e(DKexUa{(mdeUJBDmY!kt9yeF?*l@7#5+~%E zkP4fYJNtA&Jt8zZ`<`7PRmi!^I8hLseOImkRPc?)peG?`w!S&-?7Q(bDTdo|_We?^ zh`rnm)!QPrQ;tE4TkPeouim!YiTG>Z?{&jzd#`VMZAIG~3}GvrllS?y8-~+%i*I|) zaN6GQ+g?4Kw!iUhuc~N!X0`b~;M-m~oVE}8wx8K zvS+=(-@lrp_V>d7?Rb;9{bK^Uo_q@D*SW9271!0hh;jac^h}qJ&fksM3*pbZ)L)4U z^Cg3Qg=h6-5;#eO@c+rPx`mdnRcpz?$>)=n#Q%4xcZ)XBc;l<$vK8IZ_>NLzLK|l} zPMB$l`2CsSZ&{)_!H4|k&BKC1gK4aF0Rq?i9sztUZds1Wi1t2xS~eO2g+KCRIaSi^4CdA zyhE(&EGW`lSEKPyON}R3W3B6^8jXKaYD`3ndJ>S|Er9t$XX8c0(Bi^FQZ`psH?$hF zCswz#o=RC-a=DL@fn{OmU|mVw$H1bZTq9LJu>>h-L9Fdv?q;qliaP3!*;sczg%Vg{ zV?BPw4%=8CSMaUE#(HeWySp^q9eOl^W&}p8;+=26soH3N>nwBQ4KkkZG+#N&_9Ise zr5b1J6SJu-Hos0*(|V0rZircLW{7Qg+8bgI`!x;I5W8$}mvj&ev1>z@zkgj_UY_m} z6X^zF!tU<(PnjXcw_qYY^prQmuK$Ej0f+|k@C>nE2s=`S7`T*R&QHwi2dESeQ7vtRZomL{H3C8RYUBbzU_;{Y5Spd*6$0$X?w13yKOja z*ZH>3SG28ah@I!#J~y1U=lizLZnrIl*ad1^%Mg1eWr)4$|1CpoNQ-I54Y48L9CFMZ ze^_aVmDzWd)@YLF!Z{+DLyFg+Yb#JQOndD~=(NmU`+}L`>g@H{Yd-PD{SXsfuh#yj zmc8~|rM;$D(f@?KmNNeSJEq%4nQjjPEHmAXmJ0Afb}E0eZKep|4_`IF!-f-{&wdoU z?A&0NwUq3#ixDW^F8i6mxWa(q@WZu$FR{yJNZI^|(PKr+#T?9n1pR+xT%F~%U}=?1 zEtM(!AF#5_)+}W&{cka|%&1M9S;H{r{;z4a!={-`jjtodN4tA#px|c`6s(`5Sde?b zF0p77vRPocYNA`omivnJ{$RDW$}X#AH_*EQmP;PycG$={i-H#pmC!}hYh8s}!;q!h5zL(bQG48u}6 zUm)P1#4crOVT%4T2KdYKz^Eiyo(C41*T@5_+MIy?t;bp@U-3t1;HLXnVWWHS7Ju0I zv-eqWzmc2|44aDc&tu#Jx1b&^!cbfS!1e)}WJ$=tK8b|Bxyes#jS|DCX`z$QdaeU( zL}0-Ruj21gKiA;#&Ev|IZD{x>$NEz{-x&O8^RaU%6>Trx&eO8wsfH${Pwno$dn{(z zP84j^sXCnJBRAWp-SuH4H+$$z>=X>$&Dn!khRlsA)5v65t|T(e@NMMN?#CMEWG5e%5{TWv5ZoB!MISS8BaGUi* zmAtd-n32yr<6NTj{Dyr)aOq2xd1qg_8NknC#!8~|`3j#ou6o|tqsRJmnVsq{3lp!> zj^ysgX*Z5i%2+LVPADD60{BC+nR*>|+eJ#N`#76T zg4lURjk{l)ZPcOC)5+w#2mQ)$lU%far-Tr(@t<$W$n^sQ0|6S{tzS528YuFMEg7m+ zTC!7PBWLCCiz*`Z7a>gBqzyFutX^*hM`g@^K*QD#=-=8Jv$e66$J2nSlzm3cmr?ww^J23e_giSV$S9HU9bY}mV5U58KuHBxb@#Vhiv>$ zbAg2NzL@G$aT>oWbu|E2bJQKhJxwDF*gw(88?Yi0xt`EZ^`zlavHo4e&+q{J?+M>U-+b1OT3UUn3D`FxYa+-H7v z6-5?YO{!UOLeD3El>Y0!>;H)Imuz= zg1b-L0M!fZcN&$YF-CMq(dK{m>t+ETjYE!CcBm?&&kX|H6N|pfN2c<4m?3I5E`<0)>SN=ZiSH7l|Ni!bDv0qK}ZTvkjOk9Dmo$Ajc0a*LB zGYZQ-mH=$GGm6?t2rOpL;^bDslDcskMC2+ zU7OveC+;)HPm{3PNxw^8xKBMmPN{BlF%2A$ok1EKm>`T3$p|Xk@N5HrRi`m4_&97l zL}#!4By&X}SvLvvobA4ZM$(o&k<3dW+kdPztN%N{$!rp1kjjFNt~^*YcJg3n)%)+W z8ScHCSc&_7nte0uxO(lzNcW_MAwPDb-uasPAVSxcZJY`Y|LXp9f-I?aBO*XI2Y`Od z1N2J)pxzRCp$b4h8URX~ErVXn%Ke@)hvlZGXq&!rZ!CSYaoxJ?+3xe=bZ41n<&JA8 z4p#xAt{@eprSF|UtiJ`iKbzFpv6$vBsHpe(;Kru6H_QPv9JVI-!S+NuThF>kNO7nQ z6gf_6Jz%N1zg;OE%3bsXU9&H$^FN6T*mMT#U?`#9EeDr5PHU~M4Xv`Pk@_E?(PfO> z+eiqX@1#GEa&OwiLSVZ3KiH@n*miR7Xv$JPfizp*6O>5fCyuW1Q&W~YoBKF! z8OV-{9=$6Co1q1)&;fYdLZ9q5D+SriVgdQH_4fl1ewyeWka`?^M>-Lht-q^utk2lC zPT*W?nuL^E)Iqzn=33>BQ)WuHi?}0kUyMUG`+&49>JY-L0zr7Ya1( z-j}5W$Qz&!IjVM&71S_SvTHLgP4`ogh1{B@z41ENBf`0oj08Km=~9F;)?NPq!f!(T zL13F!4T^lxW_sTYt2OwA)J!YAe`wM7GFd6n$z-ogO}5rFAFnmdyQ)o7NB+jTZ$3Z< zk4}Xq)BJ=@^JzcL%ZHxkQ08vSD;mZnyO;=*pRLlDfykNccs^s5Ito>nE*~b#-NxAugyj#9vB7a5(m_u*q@m z!)v#QKVDw9bufSY1&mqB*oRU48fY)IVfmXlJ`A%^BE{+W7a=e4QTe6pixDF~$rU`} z9b=7yeMrpcJkd1ler&_GgknEZN4+r5+jOC$)LgMnUGacQy6ZTkmE>bXeGx95^?o7D_UpR37|jSJgi9{%nJf4%RSgmM@?}fZ4ks98C$^iFcr;G6aC;D&F@L#5+>LMJK2tb#7b}@NcAugIk4e;+9GD&(*H@IGt`k z;iKET&b6xigsv{pPXZxBRosTMZdy~rHr1+abe~?yr6TSRbibdw`h9H!;P#6TX4p8O z{aP*bnpTcpx7I)}^mhd5BOn*kn4?2}oP_#r9U!MT41!P>V7qL! zw^pOBdQ7N_^`ItXYB7k*nV=g%T+>y5=XKRn?I)a?V351!4U{JoWwMeZ{YPD^#%vOCaX@Pu(6{7inb7* zu_60!@D8v8NbEmtBjd3hKfLLjCUfRi!E_S_Qo1T9A1OqKI;|vtyut6_7__ueJjdY( z4t3J7Qr_(DbGmZz;6XbxGKddt;wHiU*LB-&l=4Wlc-+yp;rUf8x+Qr zk*k|{WCN87%r&?#{nSe8?d*R2RV1_v)pKrAO^`BmhRsqP1`mx3)g!==4S3!YKIsST z@6R%Of>`i~M04jhu`LZ%kkbMu%Shdr@DgW%uDo;~7TZ$X@e0dY1znEfC& zr#-J?K`eLouHB@v4(_UClUBG_XM~-*Ao+2*yLe{!@ns5$`0WJqfBF`2D`eOwMIUCZ zzLRwA2dHZ^&RvHSWV@CpzMe*RA(c>_`@J#Qo8E^EbFZO-Gp)k`4l&}1+NBvR>cqGx zEA&P%9e#KizwP>Q^rh#W!SE-UNi5ln`Dv&+BiC73sT=7*8UT|9^Hq#@xqIOQTGJ@^ z^wCXnR=QttD+x0C9W1Xire&DnpG3FdzOLHK|^HDy28FqUp^ zk_Tu+sgCG2VOdGy`dd&h04JVZEs48+CrMm=|MO}|+{<^Wkhs4`82hI_;^2 zv8g}IC^JA`U>o+Eu=xs#dVB*PWXZGig6Ar*xhfTx5W7}j32dxd8NA_1_Wr@|Qr)8( zd1-C{>7%L_Z9c9$vpb#3FUN=ph%;E3NjaQGiVfgQ&>O?y1b;HOttjzx>U`9TRra3S zh}JX}!GPdb6}`cL)=`~ z)Ugp`2L-QVqh5Tsy){9*u#eRcfFfo>izm^Y&uIz{BCr7O0LxHSTmAj4IaE?{ zDHG3+oK)_*V@?~6@QF1K4}SEyBYZ}V-YVneAs%++5#m6up3=i)w;>s7wrnq3hh;hifRepLvWKYRha5^~J-z26OK0K_L43;YIk5)7k=Q zZxKYsi9FmFj_~i@7k`3yFR;E~UANDc{H7hK_y^Wvx&~1MGt1(&Zt{k|yWpTH8>t zbXC>lpkI31=sQNyHLyGjum}ilB=Kt+*Xq?}I|s5kw+PP1hHlLeEBBKa&b-Ps%$hKi zfx@mZ@LujUY7WEfu)z0s=UsJ7ir>oAPw59%o?cQD58^9sYZ%xDKgJuB1 zdd>r0(!xf`kAsJ9*V70{Hn|HFj9|!(T!s8Lj-iqB^%8*xCi9{2go?d8xpS}Lx2*f8 zW>eQdU68NTx$o+?8|t_mx0wADYq+Et9S}gx%^q8o+Ovm+j72qm52Dl^Ai#3Zu&9-w zTpQQ!j$<-x4H)vA5A2S015dA&ABr8gY`k6PHo^VD&e`US8K(T9~&PS#MU-Z?KR_hp}s+CH}JX? z8!?GYNEYE?e%87*9j(ebKH7$w5g?2j{_1#*KGt2(rnhIJaF179!$;~aj=P~i0gwL$ z#IVPD1)-t|ff0WlKPMzPUJ!xA?|ZpdY$661l&WRw@R5gkvz{^CR|;Qv(b_Lx6nEp4z)wK>l6649H*D(*ybbd;s$GdzOIwU_PLH3CN#KJ-$DI zi{Ar)^7%c5ciVyM=iHiUTuLngJIYapbbEj!Dy0+5^*@NVZ%IF1_y!Z*rT&FVF)<_#ZOM+@vtFqJ_3qfJh(y<;-79-+Wcq)~c;ofPwhi`* zJ$fD#JHs7f?u!etD>*8S^Vn)hz`yAwn^hB+lS|&b+gv&;4(4K|@5YSKP!sv(Y zN4l@Ht@A>4s=HRC@1||buB7;AcEhynLMC%^9dol4{n{H`@78llK9xOh!mIYo-_*ce zb^-E_9r*L#ESDD6eyXU>v-aJngISTa4Im&@FqM}+o*lV6l|(i$vKx?Y!RXGt-P5!O z1khbc)&f&~d&7!p*{L+f#r(GnQDe9Dd_VM6Tt6W~uQjw88zf#09@<8JOdDY%|0?*4 z(nG_`VL($!c2O}S_r1S)MIH?(%Nj-@PW1F*&Ax~wwwF!}jG^RhF5!pr)MYlReyR;ijT4Qqo`|jm>3ZPizxO%m(k;y`YH(Sq!)*bRevmY zM^}WZpFhkqxl8AWMG~lf{;+Cs>L2nJoLfWGpxWRu`Ox7pNbu=HsE_;Mc6+<#lM(P{$uZowArVL7Jm&&gKte2<@Sp z)aD&6eB5t`bZv zD4M;qrJJhQi#Rhu2r0J)dSC?oCo%0C{!kv%{@tfyO#7`KeI8>~Woit){DRb9b{m+z zsQQs;BqJ3ST(wT;6EI-Mp{EwPnu8EiqbvAyj5!8x0hn3(un~uj3DFZ0i}IwjJ~&H* zdttWRt^<@XJ)A0X^=?AKPe19=sg~|rAj=wW3okR4EN^ZxL4u+omib@tx=xERk|VHG zgf;BchAcj*qrJKR+U$mH%1IJWX1OmPRvSBaatE5VAYUKm-{~nI0-MyQjWB+R2LVe_ z9S+ljU}?=;4>Q&P@O|n?bjP2cB1gROuLN?u$jA|2{40>7T=DQ3`MXBBeMKQ8O2B5; zng8nx+$t`O29tX-S}d3t6kz?h73+MO5|qPltYDn`$JM-1h7&=xea&h|n|@?@0k0ei z8KJN7I$B1y{+_@9xIK`cMiu#U9z6C8dXvT?M}#O_C`vk<-or5>_fY+J?6MYqB*s}k zVm}VZf=Mdo>aLlqw{2dp)|%Hp{k-b`?Ur!X<&{A#mG|~e_XTi;yRqsYO8hj_vLrg2 zkIo#bH-824DE2kw>(4_|pnF{>bG-Gfe>Z|my7ZB+hw%ct2*}$%ubNv@&iUpQp%Ke{}6WiaHdu|_Ovy- zjNer2!~bSb{*vmY4%&Sz{htcT{=Ag!{>`A?|Bl_?H|{>h)H5tMR1LkQ*1Ue<=T+MM zn+LVjC2d~40n*>2+`FyRs>Pc7;~dhaAI*re8|K#EU$*;y7_|H7L_u8!C>w!u2(yfG zpI0B*my$Cel>Jj}QOjSof;zC6``B0Sj%G_v0Q@rne@N0H52?%_jjeq3V?Nn)>oojK z?tF+r%GOF#0Po7ke>l!py{&0Cv2Cw?&br@FMs*wS(YejeoXo_GR9zLy#EH1t zU8H-Im@K7ow-Q>J>pneKZtkjv%>sqX4qWiSMHLx0mGQ?`UGVvv;2&7iX zrf<-}A#QqNrChbhDL39nTixd#Uli8v*qiVEYmV0Y!86*-bN^*99go&lvh!A~OWJ*& z_cqI4dbOan+n2Ux=Q+%}(PaPP?0*aiIqdmxb|B1$JAnAOfvMHGORu9}w(0qY0l58& zo0e4bTh39yPuXtpP8_#69W$Lc$3Ds_`+}BRQXut>|FToPZX|~)fo?EQsaNGEO6~B% zubKI-Zp%haO(EB$tiYu~2Bj@ba968Fnm{a3U&;iV#|Ca>y0QoYHZx<=i#KIwm;EG3 zJ+0hnVCC-Xg0JY-?-JNcoF7s;kA(Hy!JvCvYQ1_rk|gqCvV^_Seu9L!O^)$0-X-n| zANjF52#vm0tII0uZ04C0g@`4Vdwl2gK8_l0C2dgaE7=jqBZ zZ|jlI$ahYp8|_~x=8^DACW63t`3@ugaqfaD4_~<>qX@IT{INlthYlLuvv+Wjr!3@H z$5_dI(X?Yu8lTe-q)HtKFIQIEKJZ{vLrriZ20J$Gf;ri@j?-_rqc^}#bw}i5aK>;Z z@X2Iz7?CEoA;*~#f#*NiMSpMOh9p=R9oPx;jcbm-S%Rn}<73B13LyG#g_7 zlot7@IC4-U|1b!DBqG?fE7(2*icPHy!vZ^23pUj37@%-4%&(5*0^Z%VVN%TgaPCmw z&C?#UqF*lQ{;BfcKM{xhqyPO4Nce}v_jhqeH<$;KOMbw+dUNH2!Vkt59`i3Gg18D| z0;JobWB0e3y_qVuO<8x>y_q&c>~K_BTThk}V*>_GIbrEHHEfpN$p1};)rX)iexCh8 zGsJ4YS?6^EHT@|}sk-6L01Mp@!A;rT4emSNJ*PO7V_5r=UT*+gSZ`I=aCk*awXF;= z4X+H&{sO19w~X>oe8uC(c3oM#@;m=Z)@c;=B8;um9VRGR-eMgFcX{{+nT@4w9uRzm zSMEjO0QN{9n*tHdb{p=6b-juBfKHhzcko*1W{e^RxIV7ZLo>3WC7!D$!nOP+k!x`l zJMgYZfT_L%MWy!Lr*@S4&aTmj!#eA3$FVkP+x>A8gYwY3ZeDL(EFR9kjBpO*p{>DN z3e(ada2@m$l8L1=#?NUSLAjkleD4ob_FfYar@GtkF!QOw{U>;+z?A(Y{e6-54ZZqZ zsE$L4(*o90iC5?S7P@_OL#x{q-0uNlBAtKAPoWYk4yu9`TDpbAM!Sbh)2nwolZqD= z0E>vmFUrUF`jn|jsB9uqknnaLjgLWZsB(^K#$);aNIcJ@PPP$LnQE~m{yjZAMwK%7 zBkVan+YBRDiTY{T=6bSWcr~0;|B(rYAt^zE5A6G=W>4OFV6m?l7f36;%+w!M$6`kQ z$U!nWoK;5zk@zSTwaq;kpz!LiI6NZ{md>MpUS>s`JB$pcdiU91E4XLQEmBY}k{o3# zUdov9;I_kB!8OWdlP1St?{(kSV58m1MLr)it%(o|Ve54VX2(DbBixxN`6?kcVw3-& zXjdza07~{N3s~G%^e^qVc@jr7_t`)=oeiNLjTwvEFz($o+5{Q+XAWfd@5!D?;wMcW z4^6PAPIOPG$!_i{>efs{P4?eUznkeJ*xT-?CKJ4bGb;0)ro}}dl>?te--I#JCHVN-^V?rW2Sp) z&G&Pz+I{L4qAw%eAGQ25^$oX-+e-0)v1Bai#?5_JlRWmwE$0jnX1?w|9M{;F^$O;C zDPzngidEG<&aP&S$jh&=mHIUFKlPi`rpbfJO{m*Zz>Rd5-HTHOrEKFS)V}Y5pCHdv zGGRFDEWrjtX)0$ZMIIlFzh?uJz3c5Ho3JE*2(@IE>lrt~yv31AB!9BLcPej+18n?D zlz|bak@hvoR7Z@#J!qKHcQ<|pOiF8l+OQ|NF^P__$LM4E2KBM7l!An*etI-j@6hXI zY7gKqc-Q#*-BlF0vg=s?Wez7+k#KtkzbD$z8?$wXC|zVZt|R>MC&IzCzK|@kn&^v>gd zA#!Ao^$MAnnhmbKmnY3RF_&^^p>IIHJoov5m-Aj||ylNChsWz~R4n0)fi3TV0@<3<` z@_GVJh9x9t89@#*rNBtJ&!mL8BL@7=e9Ly`&SYmEUzFY%$-!BiM`OaIe{tP3`*f+t zA#fcQfKxG`UUmhlAQ3n=vY$YYS2!O|R`1D!eY*Cb(mp-3XwW|0kb3+;#oM6p=MEAI z`>d4m@#S`_%=r<4M{r(W9h_-#a_d1}P5+oM+Y}9pJAyG!38(#%F82?s3n#!e)jc!G z8x)tFYMxsg3^uHDcU7rlfl&V@2(r)0Pw;fbR-KmmNe~G=wGG(JZJ84d=M{yay zSHT}0r}eQ1($oH(jg8?VbfKG*>>9)7s~4LhG}Wy?$XA;9>!K|&_XHH83cI=Jr!@tC z#5EK~G4l?G;*CZ^k=_UK3IqG*A=6%-KTv5e+d|sQ=T6?p(6aVMyFVVNtd}D#>*XSH zD2KB%$o5pS%Pj%uf>GFM(dItxHlOT5cFX1Bx25csn}T}nx5=Q*UOY32i{%FGh2JNh zg_~Rly@QY%97yo{sCV5qV{YS|M??eZRQLM>seIs`&TNA~XTg{t$hrJ+#PjPLW*f5^ zG?3>p_bjrcCNQTB%&NqkpoTVh&h;q!whV7Vwk^wnvn-lKYOJiA)KF}Y=tFIUb5z4G zbrY~Oo%~)}ok5Kpn7fTXQKsxOJ_+WUCvo(fq^zEQQ!5DulhHl$8BX+|yky4=KQu@Gz~Jv?%+_ zlJ)lh|J6>WQ0#_WVq$0H%hmszP3Dp3%2p8}r8%R5Tz)B#B0{$6#O$sF)#~TgbLIib zIBMF!Bx;jRWNi5%p!X*2RwKVD@8xj!zcyyyB2cZjx(B2{DV60dwheup%t7BBg)Eg3 z3;~R6f+PKx0*Y@^f9LTVkk&iC!sXqXV_FT_&3*M!9FI!Y@OE^=M1zBVAP!>S-}0QD z`+B3hdI+zGOug zHNvPY&|A-3EyTzJMC{$|yD?dmX%7QAc3#j1;3fEaHoK=L_D#y}c>b}ZpX4&JnuX!!-L>qu>fiXK=PE*kxSGBGM2HE|Q z7ppYEoOF0gJiw|}pfB|b!x$Bm>J{J6Jmb+}U7jx75az2IqiCMhVW7Hu*mTu_-OJrw z^x#k|P1`&kJ#E*c?V})Js6HO=irm!7%K}$zn}<;@jS;Av1yzA&-$gdsd&8)i#(SO@ z@ZR_0d&4N4mb_QzUJ<7}1bdTOR#N2j-#Goy&$_welbke8rGJ8%!TNPN{bbG-C>ue? zxzOCVA|B^t7uXLTjg-tp`GBn$tkbfKc`%ZeD5hJ93Cohz5An+9(~a!e;_ z=%20G{q#rfnT|OJPLeIMN0U`6=#X!qi(baS3n*WJFC^AN9!I|_XmE&L9q=9#{1C2r z06cK}PP6$ZgYB(WM43kGFOIQB>c**8<}!{CyMy6-@t4G5D#_aqV1bSIKGxC6FMB{G zYVuC?(3E|L|1;Wdm2szSIRC%{&OG{nGp8On>ENl84Be3*3YO5J=qKCoHQVUF1eV_b zAZsY4{Qlm^hc-u1@nZ5GixrMmN;cz^^hvBl2aA#(?u)yYxRs5(b6f}|?e?h^Rm=joBFDG|oA ztHt&1jY?)GR{k=+AaTVJZ|C8NcX(F#4hixX8b`eAO@@#4?jP@=m;xm&-dx|GbqCZx zY528!6Si*AN*Ynf+yAtM6x<>QTBVk)xAGZp-ojz$qE#|NQ`=hyzp!y$eb(yBjdqs~ zAf$G2{g!WGc<@&qc}XTsL=8-b$?l>PLtOLZ`?jWkPMQXf2qUZ?fLxSxukLV@bTg6t`uc}M3A~qOZ-!3_#;;AF+=ZhCBlTfV0k_tsIm(|Z{f~UA& zohcQOmq~^x;tDESZ45!(e%es>lZ~{2tPxzfypZfo`A;_T09CNKRoz;-?@|Ixa*toK z_5aIec?d2FGU+70-^g?zWAfoiB7`%p@nkJjc@OH&B_FUEN(k(|DLaQg=JOG?^v`dg zLMR`1h6B8J4oVE$b_I>!%5QJk#10hA%l9wtd5&K4Y~Ta5kzy1pmFv{1mUJ9DFrB~p zuIE&8If<9&hM)H4@1C+>ik63?R?3MQw+T(QXh-k`h>H0!-k;x~dX}GIM&ZUG6sw_^IyU|PGue{;xsX=?Z5SG0~LQb{ujCoCiJ&nSX(+8#|gb( zd@O{)Z+&5{!W4L5e*7_r4J@BHH|zHF(<=^|-T3Xzn=;2GCN!Kig`uiIqV`z+$*1e; zM;tUZdzGR*aim7`>0URYe#9|jvp0_52{=YlL4@eZfJUlBY@gnVnLInG#1Ddo6%vv&pGK6aP!F$g`cnA=Ie#JOFs^E?Bd>Agw)J! z?LN+<6hD9N68O2OpXX+Vu=AIy30^!P2E4l*F6gMRVR zALg!AF~EBF#MuqS-Tkj{LHYfy1(g~3cnpnqT9rNK{e1HUSRJt-`S>>*~)Ubje$+%GJlNZ7pFgI=g%xvu>p0+uxtvcWQQefA)ah>~s#? z-kzO)RCfF+VK6&$bHKdpbj_u|TDPes`fm3?wb%>m`TMwNsEf1Pp(whq(WlwD_itg5>=Ph zYmHWsg2^__Z5(e_@|B!J9h<#I)EkcG8*GqM0Krso*o{ur_0NFdI#{90N7x<^;in=Y18_o!Tt|?9OZs9 zW-~GMn+qbgK5|$;fumeGHCJFB)w#RIlp)iZ47!SQ+xR%n;$sQv%aQ4u)z;??8?gS{ zTAxrrA>rH02N1S0z_+(Ez%4@#u-OlAhhf+URH=Mz*<{NQ|JrI@abqyjR#b@8IX94gJ{y|DVbK=c>*D zzui`+bEdQKbQE==+$jEhK)33;HC6F)CA6*U?p2KEeKJFBCJmT=$yQx&B;p zNBiFmyQbhR{hGmF;DT-}meQtaxUUCj417u&lEnZmMM zNAHUEwm75ao}T74xm>O_-`v5Fxg6syVx}kNi^ms>J%`N5w>9^56zOY8A0y_LGL0~$ z_^KAx-Ikkt*s1OLRk_x#Vs3uEv#V!~eLc*#nv%;c&li{VwYAZQ#?VVEa|`3@czrud z^RM(3y4zb;cH}Eo8v8p#{WZ59mJHCGe2RcvnQO_kHW!>&-P6T63-KJ^2>FOs_0jvvAq__?jzrg{Ahh@+BSZE%{t)Z!W#v zg+gy;<*MeM<-M6)TTedUlka7t+rlvYIh!zD_Ok(n-duN27ta>0$t~zA_32Tb^;|+aMNHOow z+_J8&j@+{LLRUA)P{?Q0{qp9{jA3x0xijL=%3M#rwGWu(R|_oxa{`vQZT)OkAMorh z_T(bQvbq*gO;3AkzL#m7+T7z8o-tJGWvQW`mATmkzj5qeC-8*;dUFL3w70LjyQ{~5 zCq#rSwT@)?ljt^V@#6ND71O&qyPJFRnL=M@uCsY{Xg2St90-%k+qAU>fn>tt5}2Vb zaNpn?F~2{zER*l)>FNP30%K@TKD{r~+06`>^|ti1cNamQ)_hy3U02dhEX1SZ>_Rbj zd}}LHo}N67+udJmj;PVkYaClz9p`<4W`gxn-Uh$($QYX7b3i&;oQ932@9LTQ#hXAI+&e^X{N9v7g0K} zY4#g9c1CGV;qR)ioFP#~N)^pIBNkK-v?}zJkcQiA-o_u$ny~%@6-OVj4JK;;nvcmG5{)y8L zLT}NUQwr@Zw8+iK>raLbfdL$$2lQREW}e=g(Z0MLWa#M2XNqtXFQ-CBoq41oEH|}y zKYK5Aa=G3L!V?c_FSK>#Bw~G2#)R#5hutjo6jv{#ThPTWYZr34{^ndqJFqJ@FVC<+ zJq1wJxU+}4&=YwQ`d$ek=lTlG%V47j3uEP4U+;=$q`3qOTR>ZpvFB^>&1SetKf+z& z+E1}RSM2OII{Wx}v(K10Lp!pxhdrL}RR!p@t(}#&bak%@ zsMM-edaR0^A+qY$ayjae&|?q%!b<75(|3&QwT_K57IMo_6I!~EV;%V*Jp`_kntP?7 zWZ2dP*&#h9Ubl6y(Rmf`3-H;5>Omjz=MruQh=Dl7h zs+rzg$aNJu*5q1{E09dH^d@PK#TCuPTzll&sSf;fhqwEaQApubC0#Vt4-+wv^z}lt zprt2gZPDyPd(qUZ))Tz49%s?Ls)qVoj&kCsxyhyuB#QPR@dc|bv^Mv&dI7e)1%h2I zu_&G%*rn%|9vxcxdh$H!HwNiJ;Dw1NLnz0jsW?go^yoJA6gIF5X)Q(;Hew}gO8h#r ztgElk+H1^+M_P4jdq013sEH7aW-_C_rMNiXFR?a=9N?z8WqHXKQ!cxDTGKcRYU{1g z@#5z8UNp$%#lG$ikd-BXE}c1zBUTTVg~>&3F6^thzroTtJePw{B;bv7kZbGcLM(Ol zN$PonOTDekEi!u|z_JS^NJxjUZvhSwI4R_KJxIn>D&=e6hF0`mFXPGtFSOIX z99T%Voi3|x5P$A$_SZ!ye>7z7FSU~#bTO|utFUp#Xb3Wy2#@XGKo{_w&wj0DWo63+YidCfoI0R!ab z&zyhi?3t&9-ggk-lMhE>Z9yQ(b_-pZdeLGwQ2`;++#Xqv_?jjol>ksDO3uteFC@h; zLY*8oPj}*m8zs0O*!H8r89GLXD>hkd;XX+t*V5IuX9FIG@*I&FD&WSfNZUp zakQnKvu3Y z?vep;Qlc^|ntNAFwtuH&dh*4-oil9cpJHn>5v&+&))6l4DCLnxZ4Dcc3T4E`rjDp+=QoKF)o!y(8*Iq25 zK+eSWV%Szwm2;->z$F1&dyDN%OEGGV{0s#xLx*H$K|M$rvL|4mi?mI>UWkPr?Z`xw z&uZ>P&~Xe4)&H(F-y+M|QR&L@JV4B8*>(pCDn37`w$my10nL z&^X03PFaAmJXboh#0&n3mK7`0%w~Cehu`kr=6=j2NubI8&y);k8N@es$a0i*Al(mj z8bYW1C9g*c9%&3$iZPN9bZF~n#s%efY{{BJv3a$Jy)^nYC*b&730|QwU`Zy67p`ND zle`Elmz_F{0GdToexLuLX(G~)YnSdfX%Q&W|wqO~Og%$W9KxTd@VOP3h0 z_ONNiefoNVbL1H(&767aV%8yEB6jMTN9+5Rtv=)s++Y&GGiG`L+$%I`$B+unsznf# zC}k--2dwlpXp@*`a-jqOVuF=(o6tDn4I=f7d_9RVs%~XI1gjW?H`@l$+KH}aZlncW zMO+LWc~L$NZ6jG}qD5YvoQa>rI5jbEV8INQc6E1l^%h|r-qgxK{s9wwOVbKZDVQE= zLds*RY>txitsfJ&A3Hjw$_ZV)j?V4R)bCOO39PfQuX(Z{8U+VGGj zdTZn-Vtp-{q6z1mEE*$)6k3`E+~wV-NH9;co?H!0+puk!jrYh%$efigc;{+wrfXSr zG|ZBno|YY25u?ap3}fmS?>i`ZHYM>bg*7}ke}h;2%j|8qTZiPQ`Jg@X@{5plo{tVX zKR?O9WYbDaTvjNeF$@H0wa7Mw{r7cdU|G#(rT85bD$8e@J06!;;?>;&t~}+iYJ$?w zT%bT?M;zBzb|5f>Q)LZ#yzx^CPGbZ+g4Ff|J;qxi-E2C3=4eeX=#$_?En6ga7GBk` zVvwL!YL8^zVoU=Z%5eboV2UNg>V+Ba$ZdTj=2Gtzj8%*)^K)sp*}vWuq0=2<8B@?6 zg5x~V9R^|KvYxKy))uG$W2m`R7ObE7ELlN(T_paQo`3Wax6&{=D zblzhSX5X3V=_{1T1P4t=(7nY;#7{N$GA~8|>L;dM%>7Al~4vpKJ@9pYCM~}X|l+9G?CeV+R-C()~ z%0yx|uV%{$8X5a8=aZ0-f;!>tT&uXH5F~I9|9h15h`S)dV|%93o%rW>1bZf%@;?La zv4~hx$sSqK9dR=E_%kw2chmG6Z-J1$C z2~$cvvTtps)0>x3cMe6uw0D|c2cVg2#}L=M8N6v(@*A7V*U{bysrU)TX;cB%BIdtnO~M$93wvZaoQBrF zd~u$=E1K+wpQ4_y!%I-o>=%@Gnc~o0R3A$l8{9*1?2?woyD~Te(fVlx76+pd$HhC; z*^%j;oMx#^O>ZguW~S)eLf5JS-r9D3gvJ80)=*N6ntNN? zrNl_$EI>8z?0V4}uRkPE_HZh9v&Y#dQzjT^QL!lQJq4Je(u-RagI=?1w?MHZo@Qg3 z(9*81`OO7_tO(RzKLfyt?^vGE2+crg9&$V;DAm=0r-R9xQWJI*;U{(%mgKdK$YcE~ zB*g(d8bvC6-GeSCQQcm^&QFEtVK&M7N_Gn91S*SdhGk$=Dj+SjMrfP7;zd-Z8>A() zguIX!GR(9mF{MlM0!1w72!*y7*DiK-bghyz69>1Ht3ETv)m1_&qCMXOK9z`11kbzI znEjqI?wE7+D3pOCAW$>_yzkI=Y*Xc=Hj2=dd18Csn>Mh6_S&XJ%YNElwsA-BF zYH?LldCXgHEDfbTPP(5A3_NRLT5P^oOG}IfmSI1oCcbzf9W0)5u(-4k9a1{g)SFDM zca0el#yveyMOa4XeT>k9s9S!uyLqQHY5Wfo>t^0{UK<2l8i7I!21PXP8kpH@{{Te)>S&e$_jo zT1+`u%G%te?Hx?5s~f1ru*Je9o^$xVqYtR${X=XKVT#xx^s#t!SOlAjC&(+-De0ud z2=q3EID@YqI+Q&WQZmHi#F(IS#m7@`rkQW>bt+gP4@e8vq7Uc#xt6xh3oPWBkk30I zh;_2%J}@Rc3ZA(Z(|!|9<29gkn87coH~;=VP&c1h2{{}4HKoAw`=!mx0?1gDd`8|# z^po=O9WR9fj1Y1@ikC7^%2{jFDFv3A)D~hWlMgm`hvcILQuGckXS6h&vth&%WL_6i zgCvBD!CbRM($?-WfPE(EStHbH{qaX-9s)I-voTPTjR z7p8HrEVZMw6u-&k*>Dk$q?36G=Xaqt$F`UUvlUJRhYZTL_@~sO=_~pQD@D=}F+gRF zK{u0CLY740<+iB551;n1QjgY1pXo|~TAU~FrxbyCro+kMVfsb@l1I8ETh6R>+#>S% z_jY$kmr3Vud8e)fVuH0h!T=5r3K2AyOaq5e_}mHZ)QXaNh?Y;+{}y&+^5LNuDe6@d z4a->PVctnn5q2u=bBIn#Fq-RJlqYv9n;~6tHtGgkG5WN;qNClMU65x!u8u6OXl4s= z#y;rM>-JI#@N8LBBVxM*uIIT(B_N!!m?{=*${eUko7EPWcqPr!g?+bX8&L6JMYXSrxG zcuqC2CRCP>=mW;4Z-mSypEv7K1oY_jpa@V((o;Oo3LfmBy_dO4(|pKuE_j3z8|3E$ zEAW~qMKQk`<4zvVo|qYkQqlZAl!{ew19Qg6e;!6hOHtI^sD;3S#MzWgZ>v(LLJO^L z1(_-sWyHsq7iAs^E0&meoYkK1Xw8||*5VW(NA8rRvyQ||8PyE5q_PF~2fm+{Y<_Rq z!=U|WfWQIGnwYs-fdC6M>Je5&JCT$;!M53hj3dn34gis4FGh?>xWx3bWM`;|gfmcw z9Hdo}=6)_w*_f?xyNA5r6I|p4<^s_Zl2C}xKeTYMq=PZu&gPz#X!t3tH*^PPB6!Tn za)%hq$&Z@iH1MEGZ=I45%r8pP4Otji>xj5E;bUsA%2!8Hvw87+_b3qZv}`ZfP~L@{ zw5yuI2j1>yE1KaXT9OuqQvyyQufbqWdm{(JK%taXPd zT#DwrQ~)~;J&aVl?m+8<5Mpr1!T0KgV~8RLUrxz_NKgYepVAj)cy^@}xf6Q2R^|(f z+Pf3;eL-JGhqrxWut&L)VzKh*bah*<0;Jx}SMrV%g98%x5qTtww1gxfno(tKr4-y0 z8fm%2-;}~HJJs}KG#Oc-BzTBvf!(DXt_38rT2=}!{E*_4*3l3JecikeJj9Zd>BlS4 zX_&8;pIhG1wah26$m*`}`gzEfSZ;K(&m()BDN17HeO$R5Tlrnsl;T;+7b0yK#%|F> zqN&1e(~K-d6LtqvFnyhQd!_UE-XMe{+K_7|mK!q768`F`7``0fIWHQFxx`6>|0|#7 zusuqAi_H&-9}bNl4r2~vevlc5wU#3Ic}K(+M}-fPgJSl6iYb2Le;A&YAU!@NLkSUp z4Q?BOhs?)PpC&HCNG6b?LmTx}+4-JllURf0X~_>MrBt{yXpStdtj`*!HN52xM3lmm zF9xm}asYy?sbtp2FH_!rWY*sG&}DYF5QELY3loxy?8r=9R+6PEDWC10CY%#eCLy-u67+r{-N{BQjqPDWHO531L z@mtPmAe2g)IgV>D#zUsHQ5(8-$lOm+v$8m(nMDIXH5*|=Rqm~L z#xThNu)j_bGzd{5dfFQNHfmMOQIN)E?9 zjr|Oo()Q@FT#NUw4-!pj#}tqZP?TV`BLt~!IaOBXd`rL6$JCROKh_U|URgaP;k!@a zf&9)TpLB?REKVZszB@7X*U5U03fWO!>qC8uM-5_r;)1TZaRt#FO;NAUS`8~)x&0Fb zN;kEjMtG%rjStzG=QFda7gZ-DO-ioNNb)1$BeQ##%Ke@`JhNco(y{|IqyQP)m}LfD?1IlNIoe0#AViRK6 z=DU#Jq%wOpXrpEb72B175;FHO z3GoT3z#JN%qE&64*O7f&up^lAxCJ8(ODrT|cSe_^p2|z*nJi$j5L`et?~L6ZIr@bs zdSW>zV!!Im%w;W86Cnb*Ik-5wifHx`7lj0rWG`im|k2jvP`@#Ez^(w1Vu?-`j zp1$tH24G=GABz_!WCZBUYhww{a=I=NY9t2p$`t=ou(Kx#kV>XPZ>C45 zRPeVfH{``DxJuJcvphf3ghIR);nflFGM(eiWO16VFns2WL1K}o6qUq>1dkRkkZUDJ zstMFz(U~dFam_vtX(&Qzje2PJ8aok~iUvd{Py{)uSa1QS63F2VO1Y7N4b7TUOeiMI zOKjOPh6roZ3z&5ay8M=+FzT4!3DBy?N()GM-$xu>zLlOl~F)Z+e?U7dmC#VeA zX!rOxYYX*w95C^bCr*wfs}hbaO-7prQZF-OBu&ahp?lhi6k@ZscaxJU(i{}H)BgIY z4A08*=QNW@P9kmtc7?t|21*GIIu|M|Ex{|q74k3EP{Yb<*(yGpA;$zr1S$QtBo%saYiGWEoj&hl0ZG)^vZ6y9hA1w+&P+A2KpC3cf z3GxmS@zugvd|Q+yjQjP#PJ5e^oIAp206%1JEhtM@2aj5D@WK+_ zl#tca>h_j$c*<84-zaTcoPDeUU<^}d7-KLU_?011IJ)oOqclXtiNVtB5Q%t;acC*) zO#)#_$Xv)RHLq8WGpeYx{b4UWYxmrk`Xh=GCQk}IU8}@jr2KWS0rQQRLNyz7Z`f7R zHh7`f_55lM5EpT_NpFh{aFF)KY|!cWjEni{NN&$&$%rvQV>w9(9ZfU0NRd#lM9jd= zkoN~{$~8k2huq{N4?XILBaWDSNHUY?u?=q%tD%kynHzqMxG-?^k<@7iY$Os1YmqFM zCSlG4mDlY_=L&{#&~!}8L)HmTlhJ3RP!b2It^OwN_}pB872cDCsG*8_k7Ze!vTcZ7 zVM|K7YcI2mHgO6awuh%>K03u>y{>Fy_;i~jbw#qAA&nh+cH&uMN`>AL7mSE+iEQ9- zmn1h}tf{QH1JCXSx@i-jqAx_-L2al$lEdu!kqfCNC|WgI!Lz!8~Y5E+G|Z z5^+_|Z%d%hco)2dI^xhqMIrB5*?a`}bUrv00`dFh<8mPsq)I<{z05Au$w|(n<)j3r zROF%24rMa>Pt3@Z5eep`^!g-4R8q5alnozubqBYnCaAlF&gA{H#*;08L?Oyb7AQN_ zJI7O5mv(Yve$+zH7?vo7$PR2p4}zV4NZ=hpYn&&svwvO-KzAuuoq|U!VGI%rRZ~$s zz!S5{B#9Ki5^eRT!U2MaO3y?U*&JiX_j=x10){{H@AKm5tgW52*orJBUkk;%f@lJj z^~n1wB10QW0wXf|W!i{U=vkstO-EasLS{sX#g>Z11l||3s7UrMTTVC+Y2*}ST|m$h z_6C!?CfLelwTWo2W1=bfqzZG@nk@3TmS~zKmb5*Sw&HMh^}{qCDt;s45vDY&GC^ca zs|*Of*g+|_Zu+8yL}5U^-l!4T1o0WuZa{5zWI0k2RG3kg>*jSsB~JMur+O^Q@b?Rs zER-%t=L@w3C9^-!ek!WtEdu4rAv9Zki4EJM!TSZ@3uZ*rlVXLTQnfk?;>466op}wN zFrgB%r!c^)E&L#b%TL+QaNglH@`O?^n;Ie}AXP-?`}4Rr&GBRMvaP#h#_I6ZAyeRH zgFSBibVhr(=lQ{<(0lw0Q!H6sB*G=QV#*xQVVaW%mpAiIS|vyS2)xE=>qdNUO9 z@(nbMdA!aHB&_MnvJTl!OV~j7I>ZtYFA;u6mP95S83@&OIo@}iw zR+<^t67L@B=9*#lvJ1c+bH|v-D-+Usf?;_)saY#%+1}z2DMG_*Qm|t}#;sWUn9m(( ztmaIKg;>JTx|OSRq^&o)S;DbOZRkqbW#$7)s0^i@k-gF@-@ysNCWlCp;#&c$UcdL< z93tgeHo}Hd^1~9HW%u2C?IKLBi&V0(8V~?qhj*m;mOh;(rpRht+CWp8Bk>86v-+sb zketAaaEv$_@FNyViE=C+T%751{dDRa@T7{Uc&u*m*v})AS2OY*vdz3TZkZr<^xjmF z1#$rb%0Lgjcma4V9O0c+%D;=zhv=RTVA0aF_?%IQJU>&|TzZHzm2(nnMfv-309d|H zc;pLNbIY(J=4=gmXzPE*=VXKCOJanV4(g|S;9!m zP~`-e zpC&{lI|7!Dl62UF;g|5;d}!aY>(Z4HbwxSl-p zIkzDs^|K*?H$aY&sg^Rh+KShc@z&rhW0_*I$^8781nm3OmWrBEEY(b)3QG^64e(FI zzbN0+*^cM3tB__1^HViL*jj1~6sXH0_c%c=&otw{2H!z#UB^516^$~7zJIT#W*XdN zN3hFMTu@};#Av1QeN<^vP&qh0qf|!EcPbVzl<|)kK_Uc*t<0$?NXtrNBgiP+H;IuV z0i;@o+Y6$WM`?_{3-}1>2y8RPsVRA39Aj<^<1rS|c`&sC>e(Bfy{ER;bMd}#s=d^0 ziX{9yi4{~nE%we*G_Aczh*LB3I4Q(p&!8uSpq!(K}d?y0|&+(rgZnIi;Wd^|iB1w=yEmEjpL#iq|AWL)MI zEeTfv9K zn{=L=fnj%=&N_+8WLg`ADRG_OeC38v%sNFLc0AMfhFissX2%>T%n+l;-Vj@d3x*eC z1jQFW5!d68x(@bf)F_lV{Th^Yb8q-Db^r@2-H|)o(d6wGZxCzmwu*-SEGrsIPs#*j z^&SxelaR+pRJ|}fnBBXCligyV2!T#&42U@bl@NppY8)j90vK1uWP@4J$rsp;AZp5Q zS%#5Ch!VZ(1n+N^ik)<)_k!VyY-$d6I+KB4;=_tH!I)NAEQ5_M^-{vA*X41-Q_UdK z2$k6p#NKu_+R|QDbp@9Bv|=^Hs6P02eU_5)8{q2r&dB=BAeD6R#124Oc#t3A8p&ZE z9G1q%eVr1{`$(;}6G*Yrm4M%Frfyivyhs$(gKsTE^VhS4vYgwvjuRK0GGY4UBPJX* z>5xeWPdKo%NL83)Lg-ok->g;mV;Ks)Tz%R^I*4n#J=95}vmATYq~kvvfNXhnRC?#P3d zw$%3sh?wCx?@%d?R3JpRM@>QPlGS1*>oHr;>grt9p7#RKLug)1=c}nFmhCp~{sxW4bW{){GQGu;GXqKX?s2%0EnDyb-VWgdDFjVHhvT5sfm^#{oFs6l!U-ODtIc zBo{W9)Lr4%i1>Uwq}29MJ`MvQY@F3} zP6Vv48pE*%oC2wu2bQUJN>b??7bQ!ta!%YB9MnrmfkAtx6ql+ITOaYfQz}JrJ~)6rl^d(%Nd`w41{Y~iL6&tDFZL}Z2DjpzX4 zi7We+)Fz9;k?TX{R!iuEjVL?S+@F_VqTB6mP)jSFgzfiR1#1f>>io|>Ze%eS88#9V z9yb++B7JC<><$kkW^r;~d%hU-dbIFlX;lvPRn5urU8ju%Nm8_76)@GQE#qOy${4r0 zM>VwYX+#0OIMo5Sd5R%kTM5i0rLYHt@>zM<*5=@;usy5A+WVuo4ggdS&cPVNBn;0b ze1^!+h*qT}nJN{jT7`^xpS&450$T(NS%>&c+Y20TwYow&UQ;@*ZH&p= zeqf}`NPh~?j}h@TiRAmAB_u7OONn?o_ElD9ftW--?KDCt6f9vaYCn1%Y(u|Fa+<^n z!@9ivYzW~i9qNpeJl$!wp)Ncd_9&>ucH>KlZZ(@>dFEe$A8(0sn?E{9C`w9^7;}X` zr_>^wk5n9Q4u@`po$=})&?^LZJeHNiE?q8*UTRpc5*bPcY1hp;Ql@a&>u7Ov_`3{f zDSBfL2vH&wus{w_T~Pxg3PmA3=}VckDwI;(D|6m6IF|8~r}M36&0Y|%Dlp>rOZLmC z$(@38r&Mjlj~$F=O~IcaIuRU{mNwth7s{H1q=I%7NFu9=n(%fyM{mgMAdAJ@$m~Oj z!a{-|g#~>_v5HivaAn~_bvnJPr>iUi#qOB%NysJ&(_Wn_Zkq1^R^1{AHdExa2ONL4v=;4MSVog?cZ92gPj|!ajfp2+7td~c@ zu!s3z597c0yr#qh{i+nuE(HWFPrEE)Mbf#?dSn3jUPoVNL8&H+ZA-|}7L~^?jPWQa zncK6eWUjL&X&n_ZU$l#(jyR z{;Rs{+uf(T&*997itl^*Fwd{+R99D3S6463bDpEwNc^TzaFESdI7%hB+s}GSN$;J@ zkk*GbZH1yo^*Sm}k{`B^vmEy}CF|QHN>2ALkaep7|D3$tfRaHg7IWC5-(EQFDf)eF z7iMy%;g)s2G(em`d6!>)alanpl7GSP38Mw+ihaeU;fo>OFLIB-UYKBB;homvH%^XR zcT0kbPj8zQC&^C1Y&+A5Kf!aL9HpNW<~vOca_%GJUXCMAlwX-U=NS1ehjW;DLZdMq z!7^wy$GNvdxhK-((M{<`2}pUINRIvG_ZQ=4S;Y^WGxHllVX`!n%k6@jN9y0>h{Gp2 za@8@+q1JKFI75Hn#XmO@d)=Q|G~``zqwX?_6{7xNY#f1JFM?wI6#{mBGAT3Xo0 zFZ@rF2~QR{a!e*SIb?euUr6WEB0X;p%!U28dkl9W?7@9;PYV-c=7xk7IjgZEUq-c} z9>~ap27B)r?gPmSDo(PO>LyuGPNe0_#Xj4*$tE3khb9YYU0camI`ygU28=!h`q;w` z)5kz{l*@R|R|IxX&P;H7Bb~p?AC8pyQPPo4F{|{gv$XG%hs0=o7dY*ouXgi*JVKm2 z9<8I^k0a@FIcn1z`%ia26Jfe2gNAVJ?L7L#ksC8|>}84eSe~l$dwK+!aOV~GEj8A%6 zpZn!W&Qs2ivqE|&eO-8Rk3tVwZBZUp&wgcZ^RI3uO$I597c zBHQoD9!eKEzLmtEvR&4Fnmy@fx6JMLG)~r^`j8v6{;fc4V&nmVW8BN}^)b6-@SV{2 z+D3WiV(_cK^c5DeNYiJZWYy*#2qOs22(Rjp_sB^XWG90pahcJc>Q)qK68AFhc+cSZ z>SwC%t9JTap^F?&4oJVUR`hSxO2&sAy6Lw_-0gW?3CsOC^SQix)W7X;;qmfDT#X6a zL>;K_x9z{5DqRxNi+hN~B@zivU6dZ`)|>fpm4&U&y>a0#q3yrLRGU}A&)VpG;D6Ui z6i#+E+(NTBIaz-SOAirkB?NH+iSatM=W^3->((pZ_eg=rY*- zDAwsRZzn69(Nap7o3gn$W=eYuqd8vgrixo1W4Ek)>;BXM9i*faEp%FHP; z{IsXs(TnOT!rUu{HF;^?%)bYxzSaeryvs?Ro=j$4)y;pIUV2$3fy0h+2}KfzRMGFN z$gzSfr;?xY7;T>R>6J-Zm!vzoe|YpO`EIeywD+W8{G4)MMPn(OzvUPL>Slo&tEZEcxUi0NwfNrqmBI7kz%g7|gKf(6hgI zbnKtq@|-?c1j}k$Zc52{)s&?U9TV~+!FduqN)C4P>w^;F&OG;}Zhz}3c|C``N=u%Y zb8i+NmibTecatPs7|JPu*fo zc0D}HB#~lXd-U=0!e3cc>HAG_iJC48mj0zs=x(0~^cM%&63Uvwf2q_5pu62}FGvz~ zwNrI$xuZb4A>(^YAA%`<8q+dy`CSn?RI}d+c#^vcbt2It*iWsEqUr*Y|p;Mc9fr4HT$|p#$+Hi^5S|u`?V)9t)rf} z=YSIczol>q$a|EzO7E}f7pCRb{h4tUa>ujcihK(_GDj> z3vcP`d#9K7|8eeUTKn9;qEtG@P3fG_$Vg0|B-B^=*n{NZk)-f-Dc=FM!Q$0ZVWs46 zH%N6`AW56N@l3v~Yet{2FstX%GELel)#yoI93!)xJs&I|$}&>luB`WSB!jr0_;zn0 z)DG1fQu51Q@*M)7TzognN+|!*hNu$Wm*gHyd?9mt z_zZdXuX{7Yi6^^#qaDxq*`t5A7P`Tu3f&G_D`&blxQ2o}4C@b%!(76f+P#Z4H2gdM zyh%Fy$d6^{q~Pn3}RG5Xk}TMo>~_bB{p4E1J?#F<-w%hQxzYjHK}cNxGk z-qN>_h5ehKoT~SIb;0%+dEF(>u~C%l1;YABy{1!6-xq}4tt{W0HkJ0TG1RGUs&F%< z|J5yhR$orD`o2mmUsTbX&7pb!YY0geBqaT0r}LorOqVE9Cvlp4jQOd5cZ^QE&SUZu zAu=@`^%QyH+@zo2p8h{}L0-$F?=1g2dB9!Xb74c+7DItm7fWla6xF z`kc0V@A!js@;*@3qVk~8iO<~qK)&g@aIl^`%Pp0sp8m|;k2>iz{Z(99?H(&R=(M7& zt08f=&OGiRWjWcAA1i(8Ic^9it9+eMHgPblT%m{8_EQS()ibgQ_xA)DW=Ut!Nz*6w z>@~rnk@Km`Wicc8FPQuC2@7|)zVnPp)|SIo-L>mi*ksO^rz%}0@Ux4>kHoNK@GuM8 zeU|=3u_Q`&tINxmSBmJ)N*?Ey=YZr?DAPGEgZ<4^{jR-CF8HCUGqP*MJ z>r^V|mO7MV7}}SV_}`+eZ(RTpp8e3mOJr#$vRxnzLw zV2uuL`3j$ZD>vUMP_M}U$2>)D_Z{bd0>YKpoa&18K>c!!p5bdS1dU}n^HZ;GQm5?6 zuJCLZz3*AlIn{3Bq|=BzGG&Iz5AFsOPH-2(;q5{=w_ONFwhQ63c7Z47PG8XH>vi)L zysgHc{7k=h5o=_bZ0*R+#HSwX-#Z~+_LK(%B+Zzqmf3rH-_5^mu92mNZm7hI;S~}| z-}{xOJB#u5Yo?LC)55~a75>2lQHz^c?rT^&Nd}L~CPA}yFPsC$>R9%~J;Ey8cZN>q zXG;%pqearJouk?WVBIgF$eCTpeIbgX3EqNAJb8QKvnuvA9Z#0@w8^4VbJ<03 z-$6nxIqZ|t0?*qiULhXT^_u&Jg8ZQPsqW`ky&CRKFDz=KO}as>KP86?U5F>Q)WlgV zux&n-PT~~`x|tLu7G{q*_3z}ZcS#18M-Fwub+@10LT58l@;>$;mHTlEd0gl*kALF9 z7O8$+pvlpjD=K>JY~BqkUHxGNIn~jJ|4w`A$?i3E@+)EIxRZsx=~pLq^XHUsyTyuT z3^%nfK5Vfj7SB9-O5Ly5m3C!hhUc}OahyFYEQiGXkI2<-TgX84M>D=t4?gTMXP3-_+Ep(Y^eEtw7SO+t!;ic^k9qN}V1=f_-$t zLVVl1++LHN|1(aK^In->{o@Y4&-Fz{8vg#rmHDQkoN(B0{Ymf0H!F1s>f%z4AKkCL z>H^FQ(1(TONm<>Au)>nNn|hn%q|=WNH+S_5K4EeV3fdF@@d6_S(C^rRvaC_Drv1`O8dra)T!FMWYE<{ z|GpVY4NG5#BN38*3nw;UEpA4FS+PQLtp-T;JK5T_KAbN84Bvr^Z;aEqlqI2>BB?HY z>VI=4fE9P}qpNa)FAqKXaA(cnUV2H2=!qVFO(hFKd8bNp_fQ^z)H6E?jQB_?_YK5+ z{h5OPzb9Yl%P+NSr9!Rsm*9TG$_<=y00p1))v%pUqX}tMKXQrj}-;uFjtF(lM z=LP0zAUdej>6X&_A|voafiwxEZC^KSP;ti*{@to!MW^}w4f^3NUiQQO!(ThiH1PHR z326%WHY0g0DgEf{fiYM7&MKqkHbKov;5s9XH5XsGj>5%8R7EFSN-vMKf$vLeQ@}7^ zo6^<6ACtg`e#u+z+NQAbtDfj^yclRGU1)+S@kDV<_k*GA~}>us`D#}N8V zu}T9oopzfQEtsjZ+pKKC#6-8*qa_rW{JPDaE%*`}bKPdI7EGLUo4wmSJi5(3wbVh! zce`U_uJ<2d&LxR26B{mFqW@odeFvkbzwD!;??Z^I?ZYja`A`ws#!yi{TlbO1NrlLC zFrgJM{YZz2;CD7XK&Q-gu~ShhKw!G)Q;*q#PC^=GvTa|bazG5DFjxq@PSXPtPu=G9 z229%NHm5aUvazJJkAxJ&8dBr|Nkv*0Oz*h56v#zV7l_43ojW1Uo!I$tZSLR+agx$=Cofhf>j!up z?|Si+@GoL0}#DBdr>X|@I9D`5lTC}jiV zBVhyLAY}uS8iXx(ha^o)p@is6VjOrrx&?T4!UkqjDfR;CCsikJd)yPo?dnQsL4Bajp4%LfSiVO-VxkJ~CEM!+mB-Y@jyEDj@GR8qngO;`R~(rjC_jFjTdt*k!)cc@MOnjLxsC$L=n2JSp^m5K3VA9jar))NQs9)uvr?L} zgAd0_fpZqmN{OQu$4Y^d7SBqF(=W$LfsE@}`yJv-xaE7{D0U&&v(lN-$<+T$s6PY5 zsiM)%>+&vk#N4Hhh)2=g5ewA^M3aoNyd@#!?FcDvMM!xYvQhL4jwEVdmQ1c->=ZxI z_9-EcE&y4b{XVfhcK5sA#WdP7aasrkn_u(*fYd}nR~osA2~lY{E_!K2$N;2ZbQK9eT0U$BujAcw?hE;fTxDeKC1!K*@My+akY;P@@{ih!+_$1RaRjP z@N*M3M)JoK8u%8Y$;~9-R}wbPRBw%Jz;7pPnL8R?v^3qWk16{QACVB$Q1EY}kAV0^ zf*-i)E?VB^F49(WA4wCq2-}5(>Cw(|VZGSf<_~_x`?e8gwZCBdeM84DZ^1joB{Y!P zLk?NYyd`hkKVDYP>NkR{QV({ zmbYLg8DRqwuFiZ41g!7@=|9IeN)Jj3E+VzR&-P243_deD8Hi_Pw*cI9Cx;!)K8agK z31RIsT#C<>2F7L589-d6Y@>K;Y2Rp89}(3xI|&?>o=47Dv*iDV4ou=jD}#w0R~b{W zMH#`^`eJ{bJNeFy&f&Q)2x=o`z80; zY+s!Kw7T}RAo zcbYA%wWQUYsoRVst7NNL+G(z}6hn%TESk4Cw#611=~1R8DNa_mKsJ9eRpg5^A?0f` zA+a=Lt`QQD?2#<7uM8{SS=MUg6{$F7#xS*4R^5vljSN=oQQSPMCuFF*z){|O=7~nn zb#rNKc=PJeN0H&T!nuU{23cpXTnCwe^2$QWTOQkX+l2IjtXm~-Y$T86{fjMmCqvJB z8hYN{(DOb|+s=EMI*IBI4!1^p_on-_xgFl4xfPz8+u*6W1)iGgFH~tQ*WB~wdh1k? z`(8RL7g_1QWkFPKmyCwoC?Vw*2`M*6NV(QR3hfx!TCQV@Xq2hHE{-D>uC+vTuh0N8 zNhEZ3ZVmL@BKzAcxtYP4p4kD+|PMUIrEnD zN)iKC^*-xL)|5(nw&l)O*|jnebek91hnL%Rkn>8;x^bN#aY(acVg-LBdo0lXZ@xBE z8p}X-1b6PncCp*qq6=Qc8R&C$<|K6DZ~=a7<64*Q9hl4Z)Le4i*%M8?1BC8>T0g4A z8l$Z0i9yLDL>NvK5=(j(fI?zdj!SE)Wh{tC)*#21oOMTPIF6<=UCLEYjXq+t?33*g zj`ZA#ZmFF+)#{En7k_8 z(EK!z2DSO=mQrkfI&U<4X3%~7Kjw#Vldo|DzF(lNXu%H;w3RLRz(Cuh1y2Xso-O#e zK-;SYpA%?%x8Roq+CJ?E4P&(G2VNFDJy)38e8nn$&#v+)ea_SkOy3Ah)ory_Jm6n_ z^&{;n-3xr(yZuL!T7Yjfk`E0^PkwJ;^dSAW$DUe82F}8=gO3i!n-2hmkjU^W>Ne~41=9ttZmNXG546x+6GC)0XVQ^8Zm|-F=j263y40@K>A2Im z-hvScvSR%8Gx8>++-=GfP^7rAF5+MwB+iYM?tfV0-w7jP68HlnEs~k`kq>BpVnyUu z@@v!mLcz2uw?s#&*y6GsIqD?y5W2q6eEn~Bh5mIbztj=}^jBH=s*KJk`%XqDkq{}! z*%VzR`R8g1Dc4X)xpG3v^%7F9l8`Fe80o=g&rx=j1OPlPn0m7G+fFUzrw7()TE8Wb zdJnO2v3ndcdFyW7sJ+(dge@}t_ay5-%@Ri$rcY&WpZiJKaMY87603ojGS-~Ep`}2V zi#Qy5Wvq%x-;N|4`k-LaYOMU*NXo5rVc9G zDUDlGHoc}aZcVApn%uZ<=Q}olFi--2w^MSqp!9?9EH{jIX&8}%8unSKV-0T=x^orq zK1N#9oT^#repW=TtQHD$x`>NR#j3B{{Hsa&uwCW8-4Vr(hU`8ATp38SUT*fU41}A_ zAXJwL@*Nv;r5zC+FR-Q^5$$eCiCHVI_^GQs^;>q8^E2SC=7#}ubJKjq+_^Z^U3Igy zN4u4fkfl%vaFpl*cYj#NbCKc7vZ3Xe(Rrnn2s51s@$~d$!<{0&TAr zd`_Ur=Fc#`)$clix$1Yea;sd1w$0Ln$#`IpySxRz&S-Kqfi#Un`>x{a+cUq)Mij52vyjj@4zaap5;H`xpVYR#YyNA@5wgkx zE(@epeOkG~n0>fgV45tM-f6<=q)L_&6J10-+*qGr*Cox#OD5JmWMZcl3X!l_KRH8I zeOQQtV-+a)*?n^QRw69dF-G&&7Nbc3U*F*BB!I7PDsgyyQ;DwYn@V(DpKCyB7J5a6 z8*3`uSX1G~nhH18RJgHFq1zBZM7fNEQqwA1O`7*Av&gj}Nv$epj8#N28c2+kQ$Z1c zI5DlZBT9;p_kG;n{EZS6NH}HyFvU zb|}3nG6G-U$4H4~+K^+~-L2w5LFN&&2G>Ut0>{T3y7V9w^z~iFNh={ zAs|+7H$mZY=l#jy0BOmZ@Qa%cgi+sS< zDIbM}$Ok++<)d&y@j@&PYP`6#?9@&R9$@=OKhkfumgjYk!cken<#GNTy@G@nqp`pc3$703(3O~^Y$Du zZ_N>ronI?$-B@eu#-`HNjZLMkGTTa<_Uebc^`_bJqn@_EU1h=p-u5y7ksK}p=RfXA zepaP)o>7GnICoRZNNK%Mg%NnjCsIaAFEgqz0^ilgNa?Ik1|5Mn8_DZPY0;+wBk(Vb zyav(qi5??y)8f#!eDNa@?5SLX2lb;190c>1}) z({s5`y|~hWbET{1N~a9H5mP#15=X2EI!*!qItix9meOI75s00t`D9BecGOg*i>d)% z>bDC0h;Vr@7f3_e?5fc02|>SEARhLNln7jX1leL2r+Y?91gw{<@QU}+<0Zn ztrxc3bY;uK!X3SgD;0akOnc=9-!mB314b9j<}T2h1PX4iwT&*1vvEEX#(NL=$k6Zt zt*nluyb*cE44GWr)Ef?xluB#l9&r?q#G{cD)6i#wT64gk8A+`IlZ+}|E2IxvxYL_L z%6m~rd5;MRL%61E2~5FTvR4E~Z5HxC6EBt8ER@@Q z1Vkk{eZOJ@I?b3)j+iUuh`Cmdn5*T8xn6M-iB>TX)}jCzN6z;0=7p3uE~LC^A>|GC zmp7OzE{QGy5-GBWqVfMUhe-GWzZXcW_O)1<4l%O|NX&>UuH3M@EmHOfiNCNyGe5vp!9Oz{gSgK5 zhkpH$edvhvEY5Sp*jz+kuvTKnOj9R1d^+++^r@oeOj&a#@_VFdE^o8joUtUYsHk z)?HK9U4xjXo4CQV#6%%)bt!LkE>A|{6&rHXG%B_&#EoK_*1T_4Q<9&1tr6N_3iMj* zxeWizeJ;UM^ZFWwdHvBkMzyCqR+<%ZTM~uO4P9E?TGW~ku^QCGKB_;@szcB9uF3Eg z<`M?mo$D~V_Gldk!DG~ujOOyW7tR3p;~iwseRFF z^){!=n#D}3{T=na$n@4VH~9U*)K$5>+UCp)yd$B1AB6URS0rtNW81yWYy0UY)IHHg z;hNC+Brs_Rczxu`+pau;*&Q1pe)LAqHnt6o`{3G9fa{gypGD(~ikb{RHn^N5Ku@YW zSd-xgU@oCPEXU>hL7S(2x53(nhD~^Jnle!^4Kk$UtSh{zkSM1;xmSo+&ICA!5>_DR zGX7wQ(;1FtJoROkQVA7Ltv5zf$n7*!xlkeH5`|O~hp_8{XKM$SwVIwreNLN`gJ<+p zTV`5Rl%>bVB)?8p((01Gs$fd4I6)dQlHoN=HM?Q6}v^~zC5{DNfD z&^UdqBETDCjxNH#?H_GqzQ1P14Wu_~~||p8D)6x_-uV zmXz?_RV^hf5bFP|YIEH^6|LWBL)lB9^sY!13Aq(s0{SltcSE!_N?0YlZzzA5Ko_~W z4N3fI@(Zgct>!m%;^EVnfM412LG{VeaVpr!OxuBZ22uA!&qx_N4@ zm8YT)9`{sAXerc+|23M>D;ZXK^OE&)%e3e8@78RzNao2+5>l?YkWd>1D=BMm8*9rp z)|PFoE!(Ib#l6as+0`Mb6}Lw!5h%t>uj+TaueW;t9_p_Ge$Gf^&8eN1!WSdo{x-l! zD6+JEpPg2aD+a8#o%j3x`F_zAGq~x!p~aaW8@!jbEPKlP8eADjJz&&p2LC=Uo~8g_ zXr!gh*!hS1n17Lxu%>F*3>~y297E0k?`xz)W}mg8u*eJ|+sU>Av*}nNVfL?rC#s>) zG^My+DXv$Ft8R&E;zFlH?LwzS?W$*dYBT!nYKG{P2aYaSh0ZTY*m9+{YH*{0WPTai z)FXl)XMvAPngU0SW`BQ;FntSaNPdlDLrY^FdlPC9KQ&7oWp9(rbDkHDbbX54kCwaWWuEGpF zCXnWUXBf$^iYdJ)G6FB@V~owEh^F@p)u(}v2&5TcDsj39ca{4{t27lV_khn2q+$Wv zZRYGl%o*MbIk)t}zO@BW&R3avUb?IT`pFBh~jzX-4u@1%clddaDQgK_Jck+~5LMG_x4_--(gn{|#(C;7n-kr@xKVXJGzB~$ zka|E2l^6li0V*Gi?ZTFuUhj;l%trmefWAMBX85WY@YAE7K$Mf|2T1zTn&7DC>@Yq5 zC8VexFlMb{YF*l=xG$jo22)j)0RMedA4o=)T_x~_$OXhQ;R0er%Rx&_x@m2-K6 zRL=S8?V{DQLVp#bqT8HgAHp3pitytpH;z41k3`-WXrckr)_COv_M@k+(WR6L*3be5RgqWdb6 zyv*e<^Vjq3DtQAq^>Y7_WNP3VBl%Q9>29wGj2@K#(#-LpnQ7qa(9Ap#!9KT8ip><~ zMzKK}Iw~|Y3EUzyGzWZ9V$WntX>qV;4oKUo(PR;2W%Cz@=2rpl9-5y8(x6IRRcU^< z)_i#!qRmg3^c_PhtDk1@tVoKAMzn=}{K&vIhsV*ca@RrYV@9kwTh^S7EqSEjKW1%3 zZ6`}@iy_}M?>D#J6x=(Vi|;lcxnm}oFOBIxf}~=IbeqqQ!i0qXGG=+o?wSpyR$sM` zhq9?}?p63^l%CYJ==NDn<`!Igj(rZjRI-%eXPsQapt-25FArx?c}N_p_Qb+NO-l(n z6n;@8)pUN4eN0X4%d0~lMTWO9moV7wT!+!MN9#uhBf}`dbCoGwJ+{JX>}yx-V-Qju zdd==!hPN=6Fxc+AzNng4u4u1u{x;M4-NEjeZy3BSl4?3%mDR*Ps{g<~hdzo7Z(%NB zu-&;1GH+6Oi1w<<`%JqJMa6C*rGc}$6Evt!rRA;t;K8g%)VJ=~?-MJ28Hdo~R>m9fNk;OFl+KQfz;pW;DZMN(&H&%s$4KeN9|}!- zQ2g8XeYyB4t~etYISqVkAWZ?WRLz-gDIFZNoC0F0XQXsiWCUWVXQXsVV4Md2D6xCG zrL?bo3tX1Sz~>psOQdvhaL^R6HIiqfbX{Zw;#|)deHYP|*5>v>o!+d;IWEX6);F5m%xS|mNh^gu7&@LXv$46SY8qLPEq0jBUN zLGel8n~fy5z`xTFET!lo_*|qxu(bn~PT?oa>;7ywt?JA&LVcuCixJyya9rG4t41bNY5IK8vw?+IAt;;Wc@w_;w)) z#aI#|&BwqIV(v~?9UBP;MGf`N z+E!@Eweoy@)BKM)@)vfk#74Iv1n|)C2N7~^SsCnhWU=w@6jCeQEJ)ryK$eEuwW&1IYtWP zv04QC@yNoo>~R+0vYrM;M-5nu<32{Q)MXH})D{wuajh%6nPLnGBmQGx3#oL~Z0;)I z${i)7d{7I?f}*&v-i~X*sl3M}#pWwsA>nQkM31t zpmHBXCI;?+hl9Ke6MC+SoLzpv(;jM9+0g@E8c1`%-x|pedrFJ1_cEkG;MPX+jFcV{8G*a? zF;Y4xG6K);V{C^0Vbmjn1=GNj0%;0}8Ge^aX-QCF3Wyn=krFyf#sH?emN$-3{avQY zhl5IUz>ft|?^_0c9Y}LPRILm)+K{JTt=?3q-vfRqkY;J{{~`(L%Yq|%n2dduVdtl& zra8m};bid+5W&Bv8~wERBx?s}>U4=QxK3%g>a}UrOKcis;wSMhkY>d4ycHqkja2+Y z8@_{RiSZ>P2uMqQ1m%r+D(x|tq&kpL^o*1kOu`7HFFj+7n|_2=mxTD}0Z~+B=2{A= zXVJ6Tu0raUOzDWMBjr0urMP)4M(fHqm&QaQIw2uVutWu6n0|&bTx+r<{eJY&Hkab5 z)Z?n70bP>OM&)F*QKNpn^4~rE=XRAW4SfHH{YMgOz#EL@yOh!o1LF*E{v)9-aD5=n z0RJMqUZ*+>_G^r$zY3a81NRRKOaakNHJxrLZ5MQy0-~O0r1Y-H2wY;ydPYjy2NR}% zSmhb}jTp6ru|EpNP68hijGYJWWh8l6Y)3FAs}_^N0XK!plfc^pX&!jbVEs|Rdk4}y z5MTKgD4i4-CxOoiq

AjO6Q5x->EZU)je<>1{?;gTeHO7fEUB&_723?-fY%z_iPT zJ<9M~>y90Q&w9Yi18FV~Ey+w+hyjxLfoNLEUujDJtTlaswWHGvIJP}cx9=A`w7dn= zMUvWpxLKv45OF+cBKxIjKpb?Nl`TfZx+~i}*1a`(?M`zzmFXZ^m;;d~Ts3i}uvvt~ znniBW+)GXRN|M|NHOG^hj10M(PffHIQm(BlTc5<5GiA-V^muyhFE0!C3f zRPe!|q0%(DL>c9|Kp~YrE!Hx11;zQLxKX-@_?$C~pB%!V2gC`IF3L9Mzi1)(9lKW6 zOTG;zDOwUn%)K(!WtP1ul2DPW4qJ30MAIb}9Yn0ApCN9<{W{+LYl%J-7@_74X3qIL-Nek^s@v{xCmV8#KSxi8vTdFvTil+t@r-18>Y`s zK$;nN8gU;JbH5<22RtW`=4l~{E1sG4NtW7)TBkm@FiTJ+6AXrl*=PF#zLcuu}5oAic*oo0U%5!)=DD%G2F#~K^r)5Mau zlYW*rSd%45=K+VdxfD;$>uaB&%Zb7ITD;^n`^$V+c*iq6T~ZJ5VSzLYoD8HH;Pq!w zaTfU2=XsJ(P?V;g9~gnVou4v#9RJl9opr3i>1TWTVu_ARmt6Xh&Qpzmi10zI?~%q> zv(@)C7M%u=Rkq1=1{V z{5f6^Z4kE z8%@;R#o!|nHt?Frc7(y7CT!sG^Lz^;4Y)jzW`Wa2Qn!JR4s1Q(MS(O6d}mS<{F%Vk z18!phE>rrY2A^xut!;vz|AL?`@B$+#8+gn{L1lq3?ghxdgyAAXgO7PuAe~^rLZC=R|5^I)DK@I&uq`&h-j8P+G?Qvd#tmeQ9Z^-YJgl<<&9xayD=-~8Hq8?jPK#90mlFLWt%<($%x5F7NTBq+NEHc`=tVCf@1RaY z?+gj2rg^haQhGl4*ewORp7jyZCQbq@2$@df`Vo9if^vJ>k z+r*yw|3nPo@gdAhje$- zY-0&Mt_BCh1btD934C;?#Y7enw9R}Ynd1*Q`(O>Tg>Q`#vxQLa0&@qR8Pa`C^LXpy zxRf8z$N0C_$Jl=-^>JSh(=ICq?^{Z&9E7@w>j-qdYxNn{4(X1jd9>{&=IkoF|2~&V zq1(*bhYNNcI%gN$;?EBqQtT~cT|7$D`i!mqr++hc(6A;PILrW_7D%(evjeI3LW8e} zq$>=5Jd%EVu4|=P7MAIg%WPq|vt272G-C8LY8y?n*;YhB9(Cn1n*Djr zrum%t>&UPPn$4LyO~sQr)7IU0toO8i?bM^T0lnu)T-%JqwN*n)j|?rA4|U)3K5%gz zc&@aq=noSc@bTur_R?{7b*yncHFtq_!{w$*Efc=Vf(|J|M_sx%1LqB9W!nC#=^*3u z-iNf5R@x#?s5>6gQeqDw)Q29@Qesso)JNQv_j`Es>bTz%iz$6PQpI9Q>=C`ilvv+; ziz%^|6Y3v*wa3ag#TS4j03}a$} z1Ncf9k9GKP+;XIZ>CaxP>AY!*bxxK0%1b+SZu#Xu@~&MgCxgBv;hZ!)1WJN z#H#(cpPi9&i)?s5R=9`sBQm)T>_@y=>&M(P>3SgdMEY6o4<5XuEp7*R?@>YnpY32sqT9P}!cl2bIU zyajz}A+e&dH*>3#{dH%%%4r4glvDgi@)#ZPbR+qv5OPOpxs*4JytMLkF{}IZCBKGg ziX3HE-Nc??_>Bn-{C1Qo|gQNc7w=aRFo+jt?d(yV%(Ut;*D@cz*mAdx*d_G9%nRG$WJ z8Jsc?OeK~BqOQ(lO`SnsBq*&}MfH0Gb=Cq?bygMQGsa~pbv05y80?+`e#=Pew$*JY zh32Qm4W`Yn9?<+-P1vVHJ3SzhrDK7&MXsp5M?Tvi?(@c|xdx07c{&h?rnPf5d0n9i zfjb?8dGjT=#O=wCFRbnqQY&%WS$f_JeFGQTwQ}S6iH`CQO?>anKni-Oie9^7pj{CHN7FtfqnKSa{&4PF;X zN0|JhLpw81GkAI=on!F4NJ_n~c)|!n%%f+2pH9}nf4r%m7(0T3dQNbn)jZd(%uQ6s z+tAIXaH+}gvsNylK9{NX=&)(pYt0Kx>!e33eHD~7pgLbbTbN52 zY&Z2cO?$Qb?WXncu&vpBbygGmj<7gJd+4Lc@D}D02HTzMAX$&f$)L+y*7CoZ_AxEY zkQSx~4@B+nPi8gK`3w;#k$#qIQIjQ>UU+buOYzjazV=?Oi`Y-)AyzDsn%_1nHa(f& zmer(xnF~+=dak$Hoy+h&oJ$zo?|FT(o619`qA_t9_U>h!tPiNZ$T0Jt(sHe3a*;o3 zlWoVF)2`^Wlu%)@epzN``5+hU+5d>5^~ry9#$xg6xsR!+rqoOMbU~`$i*wy8dxZqSF4)qG+*IlWi&xMddATS9EaUKN_DS(&h~*v25ub z_A#nSl;ljE1{p(`(n?Q$uP?pCt|Ak7!u$M3vJ?eA-AI0&Md>Ax5%{)1ngMQmT@aTl zpjd}Kf6uy0DCCC6)uzhbgE6yb8N^QU&AW|skHPkhYmR8{G;vFuuX1rZ%5(LUmg`r` z2K^FOnMLExnKJ0}UiQ>ns;AP4To+e0l@WW&o`tTSTFO;k@;Q#h92FZ0`ygLUm)4(?b z(k$?bMDlb?>En?Rh<2*$bW7>0fpHp$u9f46Okb;uH)J#b-yFow15r)epA3qADl!65 z%`;N^dSILcMn&f{#dIItoM|=Q7;4S|(WP>mMJFa|z9!cEfI-x$ofAbR?qS@xBk>Hf z<>VbLkS!#{W1>_94zadun1GR&U;tyovt`4xG)xdkMPO{WIC6J$oNIl&us9478uo)E zZ`)I8p7A1M3`p~yF`DX8Tt@6=8qC;L`WARfAk6@Y1UUi(qM1|##-5qW8;<3NZc@W| zLmIBM@?DdK(UkxlYw~)-(r3vnY4Y%ciy5I?NEHR6jfR#k4WyHGCnA5B*;RTB_$DLy z9;5Wl$Oyd0A}>R3tN^zOq#5A-0;#y=&;*4_b*5|TOt+;v)44jT_jHR!vH9Xfj~#V~ zU+*-hm;NZ5nxUyTjt9&C$sp}*wll_-Hsj->O|FTiDpa9erGdFhhocKN*RtFqHF{jT zzHCZ@fR?aSNWj?8S{nMjjb6M|o_UtLWcC+8saxuXTdcE`2EK3Tl3C!6fz$);8Ax-$ zzYU}w@KJ#@2aLwgV*IB9*DUZyfixGOg@3nMzhlR6blV(|F00JiOZ=#x{=%1{H|p40@>&1sj@zcuCKBuGc?5*#uG zBwXe6;p~Yfea<731lb<7m%SOngRbV>JP-F+9W)s+ zT80#2S#m$_;M#32F|!HsL1vVkbu&6a;?QPUq`cqsCO3+!Nw1+>n>%sx_lN#W%_IQv z4BdD`2!nYBGzwMxr=5ndZmjtzgNb}R&Q-(l*JeC5@qJz$I(50$WcXgmB@F7TQU@_I zuUxU)yOD+A%3%2{=@}W)pQRg%jkDejM;JBJZCoxQ{S0Stt;rJePkV5iOYv0dan&wG zmmP;1Mh&j|SXt8$Et?*`$l*HPeAC)zJuuAfl3VP1_JfNlNV^WX-!=K^%Ia>(0vk;R zU3WCz$JteOH^8-lGza{sk^DxO(ib8l@Hc&op)|oJac11$mVq<}Jiy3+e&7ZZTVcX{hIw9~&oI|Jk=RlMJ0e~T{8Az-J*R@&7JS5p-BUG z3xv(pAzl0Do=88-^+`VqN*LHO5H?pUv3C5yHP3V(T!f|P4NWG1JRdXmG{b=@rTPOl zUPM_t%yuLl8FQt;+H{pDnnjm6WttPHPc{ z1lF3A$!O3MZ5*u0kPeUyPAEb7OVEp0_2Y<{~RyH7=)0xjw07dHd;SxfV59Uf*0w z-3nbnjsY|X3M zm1Z=}0iW{JC)!n3gusi8Gf4NNOn*QHAi8r<>)Lt7qOv?x@DQymTFDpP81 zu`DMSZFalz6n&^n8zZ*s(qe~}C(S&q41Qj4VGkJFxcK>Y(rP7W{8UlPLlCKY=t0{B=?j ze2*}!dfOYMCuO+}+|NGJ&;d`ynn03@)C4|1a?#b_38Yziok5}U!4D0or3WPI$nTLp z4%~}uz*7ThmZbFjKq{7N@pvNlIv#&v;y3VXf_rQ zW4G|lJrebZR-#0E7PCK_1Ra=RD0{m{cUv687}DBcVnsL)>=x0YoQWC^>hg!b&DASi zoQ1k z9-@9R3SqHkNFcFhG3NbKFVtmlOAaZ6Jc#>gP^1tiZWdLr=c~bp9uV!unv*w#$o*Il zSS0Rl=Oz+}1NTOpr*~$gd^jwxpjW0pg%KB$p)-u>Y<_vh&ouzPrU}x-ch; z%DD;^E41dgd4k-RYMN({^s|~4xhx&oyM~#UIl@!(`g&NG*O#EkRj8amEoztq_cdGO zQL)={`R-9!7@0E0nx(&M(TmaThK8Y>pSz5lk_0;wy%4R}Q4}1~@>Z6-Gbwyl-kU z#BMoSL;`wxYF@w7EGl#mi}K2q(9@&TeBu*N<}+Nyxq1*!&D=h!}z>H^OdZUf}vb znjsoK6G(H!@Xc^yb7eP78#uDELB6|cJ>VdVnEFN%Q{eB#m;!Da)SCr9$VeJ3-~$6& z4~Vz*^aOlFV4DR-hxUNDB+X$lYG;XB9HDIB=#(Cipi;I`qAK0bs~>R~+Nm5cn#z)4 zzi!C4HzW=Mqrd0G1iDvcg6V3{NoiB9NO%9ES|N+&@Mt};i2kY}7+X^QQ7lUNH`lK8 z#9&mrzSJtk-OkU= zNz|-t4Acld#)Ndsm)nwlmN!_FB_Z+Q2er8rPtEJ=`2f0*Dn;eIa>a_V=HccCn1|_E za*IA6e^7D$*Da(&vfP0Go1#HaMg@Mip47uHOv6aVak>( zJ<;S92fD4`9OQ;vVkLl4hi>>n0#v!%FM#NE#pt3zCapaX-z9uRLy?c7;HLNpI+)W z2!6j#>FY+7hJZisW9$zEU!vhRhgPP6Y31@P!d17kh*xit_Rr~4>S8Nl#qViTS5!hB z8q$GDGZc}DR}Vo3ymKzc#^45THmJZ;@sCN(s3lli%}uU{;RZ?56)8J5iO zD?(e#Tk!irko17ZgrJ+t&6W{~2Z%>m4Fc(i%GAy77qb_KHl~1gGm_i=?rVkl$XDu8 z+-vpmf4!M>WT-n&-48_)N`Ehs^1)ObM!B|-va`8I~F?tcN{9u}r zWV>fK4Cc2c=73SabD{$tSD9e+@|<~px|0SY;&`;FX(p3K*kaP<=%oB$^h^0i(K6-F zbxk++!*peUh{dZOG^!V;AJmSbpU6DCoCf`-@bea&M5d$x;O!x9XYtw_VhH7i>ZTB3 zv1Z6Tv1T#L`|L(t(uX9UGQNX2%&w#;QA||9h+hOFdO);un?fvmeXy)@yZKutgqoH0 zf*Qfcn2;`3a$C~Ra#z-5NgvKUsLiE#YF=MAh3GE&8mf zMOrSk(rsh1CG0i~W0Hz6=A%Lo5G8VZZoao)Ry|=m ze-)L0A2X6)y;AzjeFG!#f!lkMXQXuO{Q@KK;2ly%N-wy7UFrC|tH$z@nW zL&}!>zr2M?gM>~JMd;wW@-FW}9e?umzGd;psWG@J^Gu|Cq@pWAcIpA?lEl^IBdrO> z{lbR#|IvCu)CFD>NVCBA22u}5w~4HLkZF0HxrROx`NYUR79T>&Yl^QIFJ9)~6{nx! z=sR*3Vaipe(%rf(PWJVM@9KR=vUj_&{@6Px%%_KA>?cE)9-iCNX%5f3Pe{ZR*THSf zlx@tEZHzLCI&zpIzp|SC73CexwrJz3E6g_b1oD3=aRHI<`=h<#oPu*OuB_{B#yrdt9$};f*QCV68a+Mw&sy(^P@!|PR)n1kmL34C^ zK=9ORV4~A)A(~$wqG2^K(do9P)M<6@(N42Ek5T7DBM#9h>EodqC4IcP8p)$1osK@S zGB&nIQ2(D&`~MoWex8jk&AOF*jZe9bHK%sMCTa)st=1*6<6KGXK(4MX{(f}G&dXcy z34ykv1z#FyD_ih;18t8M{LMhyvjr~;nSHMoymz4O-GZMIX#2EaVzk@r8)kr`Ll&2H zqTv?@+KLwZ&Olq)g1;PSd$i#3klFWa!4D0zy;|_$fwp%Geomn6(}GC>s&gK(GC8L~ zTYTJU_OlU1S4#p|X&oGUP`>H(*XHR-yGl<3k1~?H5c{GH6rLIRfEPr*S8kwidE^6L z9r<3jfx<^4AMi_&?}`l+eiZqDW7g54-<2CE+}DU=2k_yM@0tx1)SI7 zS?Ht4knMonb;u=nYF=M+Sgu3e@Vw^IWxCg7TfkM_ksm~eJo+g)rpe{$a}CtwJO!(% z&L$Z8C^Ed=xrDkm^aL6mI7S&w`~Ee+Sr)t;VoAgTF)a~`RYC%CU?mlS99Rh#kOM2> z0)E>Pm2l8AjM7@S8?j+KlxM*YIo_H2Rkyc#`I0Ta(C6uATEt*p0CrYJNTn zOKJcsHD}72#Z4fo-np!3b5&V$6%BFK&b!=d(ob%dEu4C+sSxFTmML{6`W7z{8E?Pkku;G%^CWy_C8$zzu;^L{%F2 z@4HJVq-m+S%~bj9#TYaDA~O{`#Wy>dUFQt8&;KmrohGh-rI{}^a{wcz&z+TJbrlYzER`&x718|~U{_Gt0pO7mg2 zS=oaBHqe&0;6nm!MGHP6(DrP>PYblYS}^_8ZT2pgT&|uXBj*% zlFAn3nW?O1su3cXR?^Q#ktO<`aB!PT@zlJ&4zgSq@iUc&SfP?8%*gvjV~;ads)BtY&H>B2XgzY!q2y>C+Exb19yh*H`;hp5!^3Gaz!Qu#s9SvVQN-FHVj6gKAoYO9BvPkaN>7W7 zz_j`DSuNi<+9O<+20$dM_LHFsx!Soq? z_UcGVZB(pXzCNp&W>7@n>-4ixWXXX2=0R;P#Z&Y8+6TEV;&&wg4T;S1ayK3+n zJk_o~nkc;_G6FB^V?=U(rKPDLU>b;QZE3ot^!&&OOj{Z>yqkuWFhs^J5ZT(&WN7L9 z(9$F@ZE3Ptn{^hgwJIlus>QNU9k9kerd>Jjda03UK}fl)w0yu!pD8*7$)tq3dkw)r8IX;@N9_!3aAfP35g5E&>S z3FQ^{Dl|x??RcFpt+A^_An^7;nguR;zvuQrN$JZ*l@lvq^8wE&;(+%Fq@jm&2j3+W zlEdXQO_7&IH{8bz#mdSlw*DU5=GBxa?aD!b^BWS*v$mJWA&@^HLItknCx2y1E^E&G zPIK9~uLg1N_~C8g!$%wOxbWf0jT{R3nh?(pAD$U&`c6*&eWJ19A{}Mv=V15{+ilKV z4t|x%7;83kMyfp4oOyjiZCb9p@kbla80aJw!`1zENLbP!{ zw^7v}58Xl^ENeEnvEhzn=?i?V7J-pm9{`;uubZwQZ!}erk$#q|snL_mlC=Nu1KV7R zr8HoHpJrt&8vsaEr?mZ07rlH|-itj4y3YpQFn$!exHB7!8BewJ%dlO>k! zc~F~6@zlJ&j=@|Pv7gFAtWZfGG%G$I?PpfJ+i?3omDNmbLl=I?+rgfGliI*b?cp=OUZC{PMioZj<(GOHgIBw>HtH3v z?h~|{2L39LW`PGjJGMXFQhMxjJXPj-;BTIrGE&<4yub*2tdZ2B>6X$zL`LAv&r2mz z`l3;#X&~tDBk&V_jFjH^k{}WItcz0}DgC=qMMq#7RpmBFB1s?4Odil2HMTq-5k|1f zN&>j0g_BI3Kw?VWFc~6j2MZ@*1QJu8kqGT2z7G(zCl-ZWhvC8KmvXnl`j6V8_8t-*0Hs zS6RrRg6zwIo2JcnjBb6f!JX=*`VGf#wd~Kpl*IC48?K)V!*=zjY+(LR7@)Jj?*-Bf zaQm3nfe#3zBY+PLq}8u5_?AFg!?6BIAgzAI3w+RAWmh@n2Y$jx@|5Fu*5BRyx^EcL zs~P*}N7Ani-u;CPj7bLXfnk`g22L8uH9+Ciz&Bft@L9$(vxa!~Z!GywhIye!x@SJjnfKrK!= z7Rmb}bhVcKb==PgWW=&~gpDQU6UhXO*%+XIz)9p1izA;q2{if3dn zpPnpBCR-+rTf?$s?e`4cBgE6%a!vB5oLc_OClRu#@0L8hdukqwa*SIEW5+chmWf?f z+cI8>InvS6z6gp+DUc`e{T@x3!3#4iU}jS_}sgZ zkZ=bk2`RTnNcotMC$nq0y}=~HT~C9sX-ivQC=JXuQ)aP?Hn8?*OX-ODPEu>WCP;Yn-$%+Q2l-dRj&1t7umn-w+?lm`8=ua_=+^COj-Gi57CErAiEN*5)t`>k<%1NvPS<1=j1@H}FB{rLPg$gUD#aTM%oz^+Z1|~B| zn`Ow((u1tXwB}~7x<=`FZJ^fi1VOSqdyDO)J`{FTv$q@EC#=}QBJMvTX|vaBpSE?{ zPs4g`Hs6G){*?t=EpA!FJuvKeibb6J^~*s)sAsW#ZwX2nheha-NrZx*VKmwM0AFk* z8H`tKpg{Nvabrjs#IG6;{zn^ot~LeY)zzlJ4nu2$$-s`0986?8A_bOwqBxMb((&cl z+7U+?5RNe)5{_6K6bukz+%Zx}QyrL;=NKt4Gu+WAAnIIY3T*zhGMKn?j1-thl@ZJY znmM;`}#_k-@ZQ2 zcdnsI_ujs~(v`QbuXNk(>q$!VfRkBq{q5^3ZoYke#m%>`&s}>reLqq9*O4#O>abV3 zea2w_U)!~5$AVc4$kPGmv=r_Z&O;_yAAHREMC*b%ZIHU>wiFne%1ECu;*^$qUuldt zCL5*YzE>I>FRo5$hFfiLTw>?7S{Y2QxXKjXW&3Gm1k)*wkpcrj8S@TOTG|zgx9s*U z#pI=29qk<@+6TjWhsCGda|w@MjM5`1|DU2`()KsEe^MEvbW_T|xxICFc{gI;pZs** zBJD4w+h@c2ivc8ew;r)|WjIZb(s@#Ox2^vq<4IaRaO-w+J4|XfTeqWhm2ggMUCb?` z4k>pVUwcUoQTaQ|G8R{v?tvc*$!uYRC9%um1OsGU(rFgHZQBv9A`AGlaPqSNB=fuH zLs**b67CZ%tTBjRq=9^*6%uxE^;-|3SiG zX8tIiYQ_&iTbjD}3l{{*XZbPTi z4-&IOzBZS0>&$#)F`ng-C+ldW%3(?FIPKk|&3SBo+B5%SuTn!-2L;g+?ySgU2y>Kcwx?-tHY*8uO6-u$MJ9J#*0KIbZG za4S7Ih5fB@Esck%9L)YxB#m|>y>{Yi&#*izJj+tMYtG{>+l4dOHNg8CNh0h!>(92r zC4sLx0fd0sL_pY);AGuF*pc3Z#K7G?M9%`lHa=ppkPlj^$dK)ZfLh20tZ?PSRY*k7 z`VbcjFE#kI5Elz{?ynUUkBB_j>1v1Y~k?RWvzZ^-o8ay&Y*ut|7zBQ6=GWfGdB8MFqf@$F~ z2A>#7vj*oP=~#nAqx4W7XroRKa#yj8usI?uCZlizl*v;nmJwFFCt60>Tp3|=L>SY7 zh^O1wY6*!B;c!k!IC03sVY(;L!&CMq$JldJ=Y{8~);{9--eDKpRh}Vvp*@epnWm5! zKOYHCEv?;XsrJH8eqj%Q z{VF^N)&nvl%6sxYWaEf&C8XSc`ojqN_fs?OaVAjCc^}j6V;hgSC|UC8mItx8!RI)6 z6l-f6=R$mRWpALj;qpn`xd^41#?|l4&^(h?eN~_8t`_u<4THy-{;KcFWYsQZjafEy2#mn@GRiA651GEb)@hnR?{VG}FvI7-L!ep@94Qpzpu)rA$k-EGECu?osAqg9u zG-E4k4QTK}SZ(*7Z;(e=l?|M%z^^klmQ~7DuFB^>Z>b|4yR5-av^=O)!SM;y9y0># za%Ia$meTUcP-%q9^)}p;2EI8CL10|e&jYz?O=4?D8>vbIFOQ=aNC?We*j{6wz9*^4 z-r)NQjYa=zTlr}V;M2ltum{`_Nb~FsxN1$-kvv?hH1J15)gF+&gv>HOTwm@c=9!w9 zl~f!HM|K!WW1x}zmBwn4Wr@;Qm#|<|8ki9%Ntv|@D@Gv!ce1%lYl06A>%w^;TNY(w zMaguhG%$l)It<9BMcG(kOoo-lJZnl8kje&*TbucOIQxviV2^juBu{AG@bC4`D_MC+ z4tCl5KpW~$va9=wvHJuHGuhJSS^G}-ln;rOoU7zgKG}lQog_Xd6gqjkKczbsKB}j5 z$5Jk-RuoIBs8hbOx;rbY2|rEUYRM)(0pGjQmMrgyYoVJAe%-E2Bkq-Z5N{11$_W`? z$ALuPu3)41eV}pz}9)|Cq)SPcw zi^YfHd#u11jnV`gxr4%ftOsOF%CKPI{W@|npk8LL}}p4cT0X?t083r z?-VB5wZO*)(rO^nv0L|Z{FTnM>@Slqldy|9(6%hvD)`8-v*`h!6?Zm2Tz|C{I8M{L zoQUv^l;7{mDdj+qd#7}5z-E`PsYt6pmJQA+6u8QUkYV=wtQTstemYNcn8#tAI*LJB zn}PY7OY)7E57}6DW-#@B--s%&oPk&8n?xD6wMm%?nq9J+(AU}4nHgJ~05f}w_edzC zPTow^Dvp`DHs7WbDPx<7RO>R6ZnVi&Y2b^)gu5EZt+h? zP3nR_8SDPWAWL;s8N5$84qXi-AvkxF5jZ2&y7>{7(l`^TjcdlM^0C&xvj;5eZ*2oS z7nkY4*HYm;d%x;16WZGD?(0On|GgZ(RnOegp~J^kmw^;9ztRw zXIu*@H_?|hR#`KCKWN+oqOlv*tnwBGoqLs2$9&l>A)GgTPY8XF+B%|A{NguGj-Ha1 zsh?i^KMxCN&%${X_GsTRZPunf?jI;0_}$TLV4Ts`0>5uuS`*A{C$0eAKTL9KnfI9F zq_6T&P+`OZ_c4^lI6lL6f=UBlYBXsSctaqq1=c3VKgLA(>@X3o1wJp3W|;n75lB5C z=|#K*tWAs@O{qtiB)KY$gv5lWG*S?2TBU)R`J`DOGoP}7nfS!%z&Ho41(M^03&;{! zg>CAz$lh7R0pp%|EwHvy-ak3O0&{95(pX4yRpr=k|9w&w{LXOp)dP|ZWb+Q>xJ#vh zzZh!*W73xU^%QE$c+SOC9+>;DVgzt9S=qDN=LW2>0a*vAG%yPR>3kpy0A)+FkYb%V zNR0d2?HJ{&IUujQZ9idbj6}9b&KDH-r#USLo=r`1Bp%fb9FtJ-EP}EPOG0;)N=PeQ z<^J2VH~Azz-5GvG{EgGI0V*!wzNKdsOwV8vcVff^0`$OWVj?ai5cwy#UW@_JM8yShiIEsJgNnf@ ziW-!}CEyZc)QB<0|L@$YZ&kf>>%DoiC?v7@F!$8&o~k`OP*>BID%&F&7GyX&uIUAy}L2p2W;LUS$4c|XoDY{ywF@rekS+3>*8e@!>-*lw;l$TEXg4`(0yM|Jp0nu^-0p7wu|e$ z^r;8!)0nIh-*?bNL0Oy!9z0Q07UyFQnJ_GGyeT|b0uBzDC@zchKM&fAz`SwTH=E|R zEUCH&c|*I7p0$_8S=pJebDnWY$P!VzA}pJDtR^lD<2iWYx5ManxQ| z<*-P_*D41-*f?P`LKYz^?wdzMd-44;9+?)OA)Cy;zAG-VHAHvZU3ZETRNbBwc*=A@ z?4)dNXfR9f$Xwvg$CURlC3FAs9@vB8J_WxrgRR+oFZ1}tL3xjz3Z6`t_rQ2jjJo_* zSDA-BFZLzNdwzSeyhq<+@1VT*!MNMNq^i8}N8mD(``@*NJWnOLW{a4?e@L zXL-+WewO$A9%y;bZ-tikm^3l(FYke|TZ;V2`66L+pn<$rZ_jrJNW$k5r}Rv`dph1d z8#h*YaOcl%&J?~~UwC>b7SCpTRm0`f!D-W#(;`A2e{jnXMK1`b_y17BhvFvPcjHy) z;=wJcCDG@Fo_TOfiXI{K`3I-Buq4GXb?1TxGZlu@@3+0j`76e{WLUfAmDbPp@tYJ1|UhKt?k% z$owc#d$_r^0yQlAEBh;recOV2DrOM&qdoEF3HCosk8ZoO)>b;1*urfr!JTtpgdA&WfiMJJ1`c1AS}i)${AmoYm{? zUOLimb&~19dA}`>_fm<=S1*V%^Od5$og+uS8K^-+<4{RCr`a{PVp;XQ@g|i!)Ji01 z{_0EN({U}tT!z_8DVd+cl=o;ap8u8i{9K~E=i`5Q&s)OYtqR@JODT(toMU;(0|x7a*I$+lzhE`*Vh<$eSNkKfUeo_$x;+j zu~azu?`mPtu7{_OYrjz>ccR zf{d@qFgC|n*c-OBa(>*Kj7=rfN2h&VPnaUHi9{`>Q+ch*dwyf0yyrF27J9KMMvZJ# z$#Hgb+X}hZ%n2osVlzkR$gLeOeJH`pZE*u>IT^wn4V(rk-WtL&8vOHZUJ z&M%Ukb9`!4$l^$!FK*B*-*0+}{jY~ax;708<|9a3IV!}}Ix@#5xEjXM2(E^4hKH+R z>>uW1J6kzQ!`0Y0S-{mWw!8A7nBHrZvyH`U)Ob)_$1@$GZvP~Jg4sud-y5u6x>`_^ zNndtAeaQj!s?|5}3>jfTIH_HvGAqvhdoZ$o?Q$mtla#@97l@sDZx(5MlbVPe#KY*Y`t z$lj5)GJ^4a3H2tikmF^LDal+|w^s9#rBl;O8f4#=T4x(#=TG3IUyUnUf`fcq%}Q8| zjq*{J+Z1b~RxISJ2CvEQ%Lq2|C5*P5&#$=bGmjX5^-4sPKYuu=_7yY#^^@vcbkOXG zh4JhdrTvpC@V+tnWdyZ-38RcLm1G#NP_O1<@|ExLjE>sNQ5TG-Z|KDHH=eYWd6)vQ zhA8i`c;-1+d5`HaQ{(cUf6i6jBi8czb$M^xGi07|@qDSw$MYmci1J>xT%ZQMr@|dx zc?OK7dH$*P{h2=v^(_!&@U|DKCve{CLU;4&A~xp9VW^E1PY#9t%%3CD!i2sc87ZC- z3Y8s5;SGV;`+p8*Kqu;Qln%_&+oB&BR;vxd^+`V$b+ytOX^q6WkQGPCLBD3m=Oh0FD z&uXecqhqr%3rlpQO==M6*Am-$$Y)1L#yretUDhn?>11Ew@S@db72&6Y;H2rMn`iH6 zNxUH0d_CmvMQEv-_Pm+7+xMn<`rRyzaTpr)O#tWzCLQM?vCedJ(p0a+uueQP=6ZR~ z4av7qH2Lr&Uu8aGHhgg`gq*YXSrdH^%x4GpcF%h#{>V%j7)A}gekP8*Q?VXC3_ zj#)WUG<44uRx3-^*MTGip_GWa{5BvVOFoIZnao*>UgXpgIDVAuYw}W{GgUJzeC)JT_ofC@?~E~q-^Y?+k01FPBt7ohud~?BB0nz053iTa z#g8rUgEr+ouWqd@DSW4gw7!&p`usK_^s?v+zCN=cpOf@;FALNU<5kl$$p46t{c7yy zmeifk4jIG^fi#Cri)Smn;Ec$1T8>*Dnh|3 zq`sONA%8f;7-TB`O-J?%Y$Vxtf=xKV4^zW!fjqBhxJ@mo*QAEq0!f>Ou0!g_nGupU z4UD8{R_#kdJ|MNyCP>;e_HVnGq5f2vw8%YG#Bi9ikt9?8QQw`OMe?woat^$X#2!YJ%W*Qu{xJ zYr~TMs0078@}Lh(zO)tc(S<0`>yv}bLn5)}3JClcMNV9ch#@w}gJNTv9MCwJUfP3P zU$AY7^wSCqzxtB`gT5eQsudR^gjlW6*Jd`zZxy9M{~)o=L*j3$0P;?;{jCDL?2-b* zPrhAX&@{D*3vHJFwKx9m8U>)w*?eYgEQW|@)#hA*nl1pE_kpR!=OGz4>__vwxzr#i zNQW{u=)_F>Sud)aOT2=Xmg#k1iS z7U60Z@p2aIUflhIxUn!=j#lfA++bg>W?!#fQG@AI{w{(5S#t&sm!ut6`RF1iJhercsa(?{iLzKa?geUxFq{5uv*zf|mp9M?salO9TU zvkIWEOnqt#6E&3ER0bGJWJ}+V_! z%UE7$OrxDO$ePb$5zC56#`)BK=3LX$W`=1Um(U-&)3>c8=&a}il82Pt6`JdyxqrJQ zcECK!J|MY6sR1}Z9sF*K$)wMKPxtgIj8id+VoPr z%)(#SV-JX)P24SI2P4c8(MdCdD)WFbt0E6`4;JQS9_AT1B6(P0f2(41FhAOmzBIOQ zSq~WPMLo0|bILLg#^S2Yq`_c%#%!tUbkmd;g(+NRUu!Kru!uH(PQ0pRA9-v`>K`+D z-s4(QELO$)%wt=|FIq(C$gz^vd2$@D#QXeXTT-lxg#PZaEh)CBgud|DG&80xg-S9~ zw5(8#%(N@ZVWHBE6blBS(&E;!9r1xsu5bNNE^W^$IFw83%2<+6=|+knU8r;;g{KIW z%}C)VLZt;Mw!4K&3sS7igvt)2E{q-~RJxI3ek)Xc+IyT()rP;ZgbTc+@Is-|Ex6L~ zzxdN_qUUIlPBVNZO;UPK*eTRD zZjrB4hv1eW0E!Isi;7+o!w{V7z{2}*XzvC~LN;Nz94NpDzYH#<39)4!LMqqVJ;E*J z5n2hNWgZ_&$wSyA_?3CU=vL$*_z}X&JYah>km_q)yBbE*0E*oi92FY>8xEDU+@24L zwBwcgc=)5O8QOw}I&LOUTE$O-Z)-)dVwth_MrdO#&N?)r* zMPElPQd)WMj7HcQuhRIWC6e0+dGTtR z*>FZ&CI)M7fDp^hZ)Ll{h7+HYs7m%{#vTk_s$z7l4D~-v9(@S`_4#d?=Vh2odIjb9 z9Uc|Yje0~~M!0e$0ArLxAJVl^k2rYiXoIpmA{?Vqc@K~m8t*|6#G*n&0p^>~5BZ<>+8x;i%JIj?-%o1oG&XQr(A$U}SC{wNyp6w@%j zOsnmqjw&%f&dVkCpWW4VBo%i$DYKj$UD8GuB%+6NH3(00h!K+71Ebd{pxLDZHM`HP zv}^@7=UO}NP~+vbKMGDFMwn17+Qf{8_O{EFE@N{1~jQ^n>Ei$`ETV?1#_Fj=P<% z_N6h(`t0Cdn_3xRj^azG&s-G$dNN2B0^iaZ)Gn6;=9$tA z&Qgu+>tiD`jkli3TH=}Uo?$Fq*=010K*eNM>p(Bdpcyse-8HAQ)B3{mP4!BwRO>T! z>8}R#gm~4KDddy?Ioz`O$L5yQi4heeFa|m z`pq85+ZATq)RKBaGUG10$*DBztd!{P&_^HnpVw z@3)dNkPrTs0EH4sJv*Y(8uH8`MpA#186m$v#7OE%-%eFSmOjxxr5;wxA=8+Dd%mz9 zU!bW?v-PQ4JS#Q)ddOENXbU7w5b~1xuhequA?X_m{*dRTW?K(Q^N9f#P8~?&VR$PNb7N4$=p(-n`$(7B+twJp84dFm zGpx`*kv7=cA4-}vM)+(T(mPKg|gQjgXsf0uWV>>%)MQe!-l6Yur(6pb}Aj_tN z{%GoT+py7ZBpYpeVaNdNlgxD%qzdRWCsa4nlaY=!uKyJfvY?#HjQO{UZnrH zz}_9{&&R8><|YZ0rs&#U?EdT;X`1W4F|1hyG}q?}44VFB8#2)Mk1^cxLem$F5Bjo# z4;r0~5Bis5B(d_K2`R=0T{8+H$MSj$EU~v80%+Gr@2LeeeNCr(C$U7yKZ!+3{z)uT z^6#mI^f-4my#QcTOzp0Xh{&4OZabzW^@B8YZkohk%6$AW6FHAKAAQV3?jz2J9<#>| zw6t>`jB!lSJ?JvK>yll8L-W})VyQ1q#+rv@zA@dLG1U%Y2;-_PBS_{JS_+*Xxd?pX zdS;w8Fq{d(9SKm%=;Mv4h*SJ6)&9lpvB|h{~slUu8 z1HjNx_ue(C#z8~#5HT%MW{U-?#?_ar&oy4xe$D+dO;`B1mb!u={Wx8_sYqw}%Czv} z9mE#qNE(AL-of00SyBfwlPIQu7w@P{?JnNo4XL4I=np{{M!P8#f-n>5Kzbr>-huQ* zI${UX8*zgUWF){|9Y~KP`g9=E1V+RT91>cIUFl)Ns8_=J2@_n&W=}A3&{lE9P7RD_TOf<`^Nb< zOR8$8qndDC8*@{#w)j{u%%=U4g+n8G*96T&9+990HcO~pWwEFuHVC3)v4E&-D$Y!9 zu>Xkji51BT^N_5Lm*_;x?BP!w)>~)%x`_`hb4bi@mW9SP8V#1cI*zp%1&fsTd<}M# z!~Uq_(4r3LyJoo|saA&ZwN-3I9}ZQK_vBP;YEJw`W#BRtFX*1J87s|+SBYy+n{!w= zs_opoLV#B(u=-bjx4MT#&g3sWdN3=qy+Pnbgmzj=BW-P9ew_*ECOy z>YSR?>RCR7UFv*6WV9{@jT~iY^#Yamyci+uQp1aj8lb5`V>JceJDIL0FuL2->w>mm{d=B?zdmJD|SSQO2>KhE$8i0gD;GjB6|X?L^oh^F#5#%riY52&}>k6FB~-QyFllq#6uafhC8cnzak zH0o7f3k(WJXj(i@qdC!7T-V0U)NiGyM_UevkBDxY9u?Idx}6*EzAkg|Y>90k75_VN zA@w)uvF?`7L=uk>mp73O9NrnkMw??PK|OOUU#>$j!#gOpCtxSrx?`xKmv@;$daA*4 zo1*2cZs=R4{py8#MUq~l{)d6t46vM7_?dD2ZWwg7`T`{V%GkWm8RnhNFdXo%$?ywD zN0R4$5)Sft@s{O$S)?y5uqz|IG`5QI-80hnDX{xSI=AftU7H3~t&p^>l{Q)9F8Cf{ zS>F){E*jjht0VULcr^_AYY~$qgLvGA_#mj~EAoh?Lr;3~364y!NS>1Y1fQ^ay;B&5 zSG=ouE)0#Q=qMSEGN}i=KlV?n0vbGjcJ?iL1wC32 z;*;VR%cA_6mCN15xC0_ct6m#-$IU08zZEep5FqcGCKOvC867Pr^a+V=0rGjpfC~N6 z#5NCkae}r%zPZQ={ei@`@PkN}k=T2q$%bb>J9W-2kmo08E3ug_Y&r2>Ms7V7hCHJf z*r9Q9jWLj1HAP_zCu*xONTPPv1~I_riP$#C9~ZHo&OxBp#E~Acxfs?t`9thirF0F# zy&y;;zsW%#DdT*9@Smr%ygtqgq&p-%MWR9OZs1o|ANNhR{y5(|5tLltPQu9XyNJ#i zp>%U{;y~AJRusMoePHszd5*LylXj%JRFrCYz3rcr- z;8$XQ)_x!)ol^b7_em?C`2(F(8bGoDGdAd}Qs142q{AvFBz;$P_D8w?I<2c9Zk6*u z-!R{I4XbuTb=>`R!@6(vegtn3uZ(AZ82gfy3;jo_f6YUFAwgRq=}VTA&h&($OF+|u z6zU*rg9d%Wit`=7FnR#~tl}W?XJdoLc@?f9@k(QZ&WrV}kTs{Rc_Xf8#o>E6nqiZ8 zn(^UkIF2NS#D|P+5+_pDN#eg1*YlCVOv7Af_}(p@$1tU^QhZ!B3}2`H1y8l7O>R8_D?q>rRUcA-`?1q*lzZKCbkcnbuBdg z#Q30dd#y`>o=9$d(DWm9UV{4GbfevE8xw`b`9=)3hC%1RdsHRxuIqQ2hR$KFGyK;r z54$z;P0?W5vCk)xTu)f%qkXQZalY7JQO-<(^rl+zET<-Osyv(!O-C?daL*CpZ1 z!A;S&dM@(bV9Kz#| zk+52yO|zSMR_2Usid2vUT+Qg787J^eTExY~L92; zN8QH6;Zrx(RMyN86H-CAL z7{%5j1{>{J^z@N{is*P z))xATV_H(Qv(Srep8<*YvSV6O^d_P2Ii~kWK&W1V#xv+{LM1OL z_K}22GE#I&q0$2Xp(_fNWTfbgLZt<%AIBanRFaXRn+lZ{r0_wZl7SQ+DO6f`e-tV$ zye9@;?}wpWJdhqQR9cXFeeCQ)r3EQGQ|MduLQLerFNI1nQh2FQN#^}Cl;AxxlrZFU zO4z0<@qvv`tx9}D3i3I5&bTuA5I!na49Id`!x|)36qi?~R)pZJ(hpO)tgYHf@T{I{?;8!IEgncD(VIBSplK=lh@5XC!}{i$q=}k7Q_pi}N6s(s znyZou|0^dG`<0W4^t!1xPB{!>Fs2OUJup9wU|3)PDDyB35TMI@U<7T3Tpx^?S5kh{jea(!#(z8AXmV?nGEZ+6hpQoyIBw5-V=hn_yEJO z(0wu}dp}XR8o<4W2(5f2W`!Kax4VW43{BUlj2<)9K8o+qA4{JFqd%7Sz((~^1S<3V zPwAufRjS&w-1kpx%al5J6)CJM^rtw%uJ=S*f@!j3_?b_d|NHbgd)z`>@;FjcByU0`1FO^|lD8sx=vjyO-W&AgVOxjB^sk&9T@7`qqq|381F7F{X>(25X_G98v z-UFk_nOJ!HmU#*jcBJI*b{Psh?kRX}_EoS#+kG8?u+-0H$S&;Fk+!13Vw~AgR6t3# zA1Z-jCa*B!&L#Qr8I9FSYNnAl4ofvYUb^=j+{$icHj3zPCsZzq&_WdS}`Dz>sK9dThNG_0Ewy zL0NS9YFkLWM>(t0OBRY@GG>kt<=*aw6S0tto1p*0r)ii`I4XTA0neEP6;tW=;nP@;RrQnc41ruqD&szs4^G z6(>3V&D8<{r|y}>ijDU!cs6NlSH`VTu7>g61y{p3>(13MUV-3hm_O^TYQ0KJdn$~I zKYdOay%K+BdnHz?weQr<#{Zb_b2Z5^-tFR}NQE$r!uF>iY*N0Hf=xI=UD}2@wqf27 z(+$T z$k%C`$UbXrW7%qbYOIw5Z;EpL^J~40?{6ku7a(`DI0>@nIs0e6D@U?>{hwbI zCO0Q)%V-6LHh2*hdUJgKR^|bFf4oN?Gj{nms($(3)yK5H=HQjS-oWc?tb4G{h|qO= zYOrJ}3aLcO@Y0l*NP)l~2)3?BIjCQW7dGDd(y)@x4qjT$=vo;;Z(qV_Yj_zXs?S`J zUeB_VFmH@@B-)gI0Oli*KTKHW!Dvi9%6lB;CuElQI4Q=du<~9KHWDU(UxR;+n#fxJ za7;^zGvY$Oe@yE&3YPWygc7_ap#-l(;Pui6)XQx$V{gv2D_HsJN6gZ^Mx}+ktmQo~ zh0XYUSwS~nNVFQh&!rAK@}rhZlYHZ9Uf$zU znIk`2>20v<^hs@4+&%1d;i~f*kXQd1&;sNQ7X>JM@_^Lb8(`cFIiH{f$S1y|%uDKh z?;`I4l@tHbZ_gK?{&Ke700;*G}O%aFSPD zfN3{DzBf6^Mo8Skti7ovg&XKs4IuG>z(@)=5F;c$5Ex0}24aN72LdB0+(3+w_&{JJ zg&T+w5+4YRq;LZb^1 z`KBR8QlH6;kpDcyNa|tlPRc+&H9|o~Qt$d;Vubu$gaRX}i>^qFke5a%Fp|2%#}gyu zZHu6|z9n@~3SnCz@#Rn=sZV4^$mO35l>|mow~MIk2)TBMk<<~NN-{#89-&YosXw_o zF(&deWz|zLwK`r^HRL0P7)dQ;M##k>MpDoCY^oY^M}&fmr0A2X+V{6x*?AD1cnl@^ zyOXA08@u02;{a-tCpz1aZw_S}2HnP}r&lDJ0%twd;?xML)N4;v%& zMP-R3{;4Pt`he)XU5O+PkD!$Z{os<3#3KtvXu3sLB8k%rM&CoMmPws{G~ZiecleDs zdsxz(+sq#RM3V21y+l%7wMaK%=!v`}8E86QdJ4lw2aR}*0j*~c_Vq(w$P_1Y+Va|dBToJ zQ=tdEgS;zS=DSRFx?g9xEZk>SW53Msrid|tu_Y_hmRrX;%Ai@(LNk9EG;7U+M{m z>(MLZN;?-TePQQf#p!o0`t@3u-7n8NkbdyYJYeixWMuhF?i@Q8E1g5a$GBc}j-88@ z&LNRv7``E1yV||+wRzrc`>J%8kO3A1w#52bPLa_&u7S{>)vRv(iGY+;x;hGAHPNMjg*hKa0U%wHLM4clGanZ{aP zVhl4@!pA{yH7Q@KBT49k58d$BP3C7Om0}1acWNo^2X>!V{*fCKnejH zA&CxSa>MegIX5JMWK3@2%Dv*eL6SofU&iEy<>Z_jl29}zH!NSxxgm*KV{*g7%2tv? zva2#CH!RFElpB)3H{I-*YDwHX?YnG*yeiKzu3IEQ1Q=5_EW}AwO{h#^vcDZEE+Wa+ zv}3aol7KR%T3Fb-QGt+b+>FT$3lU4X{bWfHae0t7b~Zxp7opCoB#uttxz{a{AYgTz zB#2yNM1+OlC3zs(_34TvadMnIi4T%_)tFjfVd|yaK6Kf1YpQuqT&dTt;E7PF4ah8seZnW?lu^hjWBd;N`2KL33}fD)OGZ% z?P1#gcFIEQ1)UgBs-wsJ8~I0hVR7c9&cf_#+v`FHxJ9$Q(TMz9`{&;FHCJxDBQD-c zhI<*q-^UwYjMwG*80?u%_a#^$)-B6)YwjMFiNTuHNxlQ}x;P0~(VTnE)a=T8TCVp- z>;v&yR0YI3CKm|u^<3cj6gV9h9?RmjC=iGhPc9JTsF+C-UO<5xBKG)xfk3Q{a)BUc zG2;)^%1gQ#9shJ(F^SiJN7DW<)77by3StoQCD_>%cO5*NlEa zTrza!vkGJdXhJbL;t7Od(5wK5<=_znbEx6F>{aCz;#>>ON^v+x|DnWO@1ewS4px_s zj1x7J*^eX|sq))f{^nk!8FE-vYMKYh)t(b>YDuxy6eHx%mz^V*+k_(4nz9-sk!Z{u z92VA^$_+`Z8j~9q)|$!eya!hVmSZgXbB-8(&FFT8EnV&B^~*lsIi_w{*#1;*NM^oca>K&*r*cCwHy)Gw=R;Bm7qZ&eA?Xcq_AEZg_a$ilFC)n; zTJH%!a^y!D_j(JIhbb!SXSuJ*GZ$6sAGrwf^KR*$rr`T*LzIa;({j}d$;Rfcb~$-k zGo~|4Fx*V_Vi&=MYxh}`wQ;4&VNMz4nz;VV&obwai%Uz6GKgzuggD6{Xjxnkval3% zWQ6kL&H0NX#4^%qj1a3wK|Y4sOEUJl*-Z1vzYZONb98!T1(KPbHV3a+yl;GF%CplB zeD$Y7W_&@JzY>=(H>71ue}C6%t}Q?*Cizii33Tx6>{e3tDe2q>pLuX??%2Y+1CyxEc!!y!8Re z0?47a2=}ylQ@@Q?%hsER%r*4Rkjh&s$7eVM$NLt=s~2pVs=bhwH!H*i$sjH+zlSX@ z9^$YOA&8S*>^=ypyp*uVZyNAn%&_wznjX%6yOy$b5?}i4B<#^6{DP^p?blnGf=$%y(K#;su%SC6RnXyjmE6 z{>y~Twa}kT*s2!#YYAK3LjNdXYg*`AzAl*0Rv6HCP1w2?`ly5*(JqU7_P32!lh1pa zt$=W}lmDJNR<+RdCR+h{-?J4EuJ^i>cWn#JdpuSzG%jkZqSC{R-Y)@kr`IG)HRa!^O`%hHSzjw zvNE+vw!e-bMH{nyYQkXuHzxb*hbJSA%_R(EHh+J_YX(Fwu8Jc&7rkA=kH9GU4Q#?O z{D-;To+H4Hmc*4QQmlt8Iuj(8R``ZQ91R6DIHQEPAhGk!b-)-FLCPXp@E z=prNg2z=}2+4hie*X<;k0mPa^jdj-co|imA9GaRX|?kF zFf^(>#wH@@^5)!IMi=ozlx`gwZ~2i*w+@T9{D7rfcaOLHxTRYw<1IgY>DH0)mLJ9R z-0kuv-t(iG?(O6rQDJ=?>6SOok&kyzxcz{q+ECiZSlvQtKm6$yO8Zezw@}&#W8Fe& zVlu;yZlN>~@mRNz5Qq?6+G9A%@(XUZR}R=3dKPuQ9kdPSP3u5F?3n6Py%bUC4A^k=$f^7&Ra z%s1%GX_BjfU5|UG8}xce)LBzkNUk%AYj zu7Z3{eNbe2sXi{|B|Olk5)ZtaMx_Tm<}P=Q`gKr3QSN%K+v>r-b#e=}3lgPEZS zrUIWAZT5$XmQVh@yH=Z%G^#LCFWXKJ%T{l32`qkT1=Ar?xMTiHqaa zx)t<$5;oUDe>7pMTIeq%Y;_C$&4jIKp?{pPwJr34>6ONHE%faYc0~K4NWUUpr7uqW z2eEIM$k1)V=33}W61J*^{_BLTZlV7^VQX6GFDGnm3;n%>t!ts_pY~MOJAXAa$G&i4 z^u6Cp>TQ4|3e4)T-E*7U_j;NlmanN2#DeSio>!!&rUnS{Te&0bXi3nUijMUcB_9cT zllUP2E%Tk(lAt$<5Aw*|5zc5y(3`{ud1mI@-jbjt}tUqb|04yKhU|0mr$@e@x@Am zJ~~?+5>s1%iFcn9ua*<~l$;atezCJCC*-*H5}WTnf_(3>I%zGsjMyM+4VdH2JY?=Z zTl#If#kZ--_r1rebe%_#?>mBg*AYa|8P}Y)mhATaeLD}OX-Yz|83+2ea)UsgouCEC zl|?{# z)v}>B@d?@pt6Hg(nAP~k*%iYXA2dePahI>nqyUD~8z(fT4V>P%#(7g%H%Q|xxZDFn z>6^m7;*lv2`iakU^E;XqCr9`lhhBJmU-ZpU9(iIPm6T;vjUzhJDTPG-)^nhM%!NTVbs&pL#c(6<8p>x zUo-TIUdBlA#1_$a^sXCB={z%Jnu4yxy7t^>z%Xw_rfM?E>np7Eo_5a}#XC!b?u) z)vEYmS<)+_2fis@b=K~z?Ib>zmUdgPz)#{U2U>BW{Fzj`IE zvi?4OUaT}%zPVrd=6>ayseEm!d^05SEN`YS-x9hZMm{>pwHXpo3vMqaj{1=(Ebb`n z7_r#F6Xab&kZ<{lS*99FFHGSDvGmnZh@Yh9TIkot|V~ z)qSg;HIGLTq@HSyN6PYgSTE;s{hY^@IgGYW+Rr)P&)GYBViv;r8B5Bs%a0P}J*&C= z(`f-EDUA_IF@5BC7^75nLKQ`P=1O20G)Pg?&DYcCmOL6&J>OKX)XLCf zKan%5Wfv1St~N^}5-@^E@^x{WkENxty(D6vKxE%KUE7E3s0o z_2n)aMakxpgtdn*Z0)dVrbitt62?6J2tS3y+zz{-9%Zub2B%;q#o)dT>!k;i__71) zORk&Gp4r&{$oO!)OBJcg@z3>L<7^r#2t!BEwov?3o&qpjvSM_U2T-IImsMrf}= z!wdX;6iKtTs}^}K#}|P*kasHiv`+`}g$%yJ+JXM<;turh7k41fpcy|pkn^Ctr{96z zzjmdEMtrY@Ag_ZUuYn*hzaTHYATPThFS(%Il{=g*^P&gTOCM0LKtR0?0rhGG)N2w@ zuS`I9S06QA(|UC}&}-9yUYQQ`x^$pdr31Yt9q1M5K(7b0r;JZGPyO@YW%Lc3ihVdh zbOJ$_$In^qj8{RQisUs3+5kyM5!XM&_ww^g_?uAbPU+{fHqAxy!5LZ}=P>jdmGy~u zfR;WZC~Go`dR9-r4SoGK^!3|-ep#6fePuTEmD$i&W78aBG<>f+H%{+2 zZJXv!@uS|EsX9R`4YVYMM9d?984(ikR!r1!;s+S1194%@)Pb}zR_Q?6nb!w85WmJ) z9f)6Jt`00!F`5}VcwapQDc?T@dDR4Y#RPe^1bL+dd6fitg#>wZ1R*rnT`Qx3^?fI( zi+YW~y;|U2H*l{YxYrWgs|xP*1@}sWqcPWsG=Iwo%{#oJd52dt@9>J|9bVDA!z-G1 zct!ILuV~)kXv}rjn#=D;3^88kj?*jLfnM7V^s08C*Run?k{#$Z>_F5Sf4%CBVVEHV zDV*cc&rN$|n;_3j(0WK_Zp!G5Ajq3QkT-xJuf8C!ydbZ-AO<4>lc4eHau>C~AJtbz z$ZUyuEOA;=dlMw;51MnAL1$CU_f3($ghOD~lYqY7^L@SN`+Cn$p!d}9Sy&Y3s-sa; zjkkg=JTSw(-V_|eUI2prwS=u|q5mXdt6S(R6Sk&>o{m!hdkY_WZNk>I&`gEwL^$@x zz$PCw#y0u9we34(-p%YSeC&OXIK#2G@SzzRO+McU_QpM}FcYUlCLc6|r5)b&O=B`+ z^zqkgqA$_{`bkE}1EWFJv9D@KU@4tm$58ZBWrf6ET~-npPg%X~1bNd5!g5$ikT;Sb zY=k`od6nfo6%*vu66BQ<og*~w@QUUgUeUb6E1GwBMe`1?Xx`x!%{#oJd57=5=3(c?w|GFk)&cc82h?jE zP_J)5y|w}Mx(3v18c?t2sPv8)asMnu-p!D2NYFgwn-a7hk}#%6U*1N7ynzJu_i{FS z(}>I4MUXd&Aa4;t*Y>tQdYcw~TVMs0QaO-Wzxlp?^L_p1`^wDsm6`7=Gv8Ncegb92 z&WXDju~*J!Z)kU2Y*3qVLf`r?!pLGXPUy!ZY;_C$I|*CULccp>%d}j?v zd_MC*{v`9AGa#{l+%lCOkhp;KIDg=sK;ZRL-VHj9`;M^QJA(Lbobs+9@c9Fr0k;=; z)_?>aBJiAn_Yr~T=hZzb%lZlNEPur)38$q8HA zLSK}ybuBbXScvoTTTKs&GMpN(Iu;E{*2>n;Y|<5`>Ve;-J+{iJYug;8DX^9t7m^CJ zspI8un#(Q;)><7;MOGccGmUTv&$dh}qN$16ot)Q3X{_C$4}Kf%IoCozJYlO^=@m!yd@zk@cZ!Ft+U|X( zUK0o7S;O5W{c(((f7t$|X*|t8P5=EkE3*djzkpX8Pjl@x3FK^F`B-4# zw+jV9B9lVdb&Gsgo8J`_A0%>)`D*mHqS%P9++O-IxlQ!)FDvCu8s_ZigaQFY1H=ue zmn@)OxPX>27`>!axbK+y z3imDQE8MrJZ({fDTBo^RY<-$RM^&E~8=tBK_1&s>!acNg@O27(T=MCyknf4mbaTdz zmYPn9HLAfNsa#*`*^&C=iu8)YMo50VqT?%i8f0=o`WdpR>p^DSH!`jwnYbX4NatNK zH&=1>E!2Cvql^q=q%G8Op8(=;9@_?v9~oM4ixu z{ME8ONo0d=^#--#uqbU^H2axRt*$vqWXo^F;#|vMgiEM6$b+N9bj6XtWyFV}|by71ceVs*)nQKD6j-3aD2qpuVzzPO6q{(DbV7 zKwn!2`pP8qC)ugHsV*Op@l`yx%|W z9FH075sF?@6RO&-UY1(7#K}BwXgfs5Mgc`2tQ1ghr+Vw#>jtxpFL!TjZyziw%lsLe zxvtRO8!EUMlL#8X4E2c^Nie@*N5nuf&Pj1v%G^^!QGe-=zW$0o))kVWw7{WAR0^ms zG@z(4d_^e?C0@-BE9DBUlq+<&JW`bVr8HOBN}=CKBga->V&xlV6d0}_jm6Ohn#n+Z zKGn1UNsv(FxN7l>vDz=C>gORbpXRZTj1KXncvS_E_(<(tE&aC8pg}mQH3y?ssxXW? zDA2HBHN(qMWtnKXyFrlpOQ-YoSDbFp_>6TYs`6EwB7{qCAT>ADU>`w!@p`{tWiwIx zAMg5pZhJ@?VY=DAqs8UEo7*0eiuGyB9lcgqp&y)E(Q8*NnfqdI>xC4_Rariq!x$+;#V8HseePzN{wa{No*ye+gUDLSK}ywJr2z30v1f z(>d+Yp7;G)yrC;RIl9|fNxcn_gn(In*L%CZ?2Xz~rAL9jrpnX7U~#JJUG-gWM4;Og zJ?KrjXY6Q6&~4Nbkl)FCXSO8hHboCQGJCu};T;on8}UKz$b8#d5_B8!L4G9jEw&`+ zHsXUkAUb2$gGkVA#0NQ_`A%y|&~3yAIn;wla8)IH^9gT?`P0;aR<_WWC2X#R-kGpf zE%fISwz`G>dcxMU&_7Dp+7^2M)cMx6&}D~&=4$7lDxH-6%C-B1H!e(XEqm_qsaMUl z(9cNNsup@NVXIr{mnCdX3;mjet!<&-lCX6x^am1lL<>z9Gu?b2s}1m>TfOl;p|f51 zzHrq*O+k0~y9BY-b&t;^sMjkyz!#?>bmyWkumgRO9at~aPzwH+C@*JhNF#qbV?(9i ziKZe0X|zijyg+2|G7X>A>GpbuA!Yb-l=61(4fZmhf&P_*&9%@kOxUUx`aKC--9rCM z!q&9VhsTz)0SbCPVe4AxGZJ=03ysyxXE50JlW*xwqe$Q76X-G5LT^misuucp61KX9 zesjXsw9ubU*xDBQM+sZkLeoe#LizTojZh}#aAO$qjo2D@i`LT_5=ac7@#EuB*Z(T? zhrV}`ZLWo0NZ6_t`lSh5-9o=BVQX6GYZJD%g`SDs%?{r{?}`3e>A61L9j&2xbCGiu zllB+a!ToXQY_Ajg1+J_V*x#hj?{Lzm=^2^{K<0YpsRv&a7bLo9l=I$EnN`?wDg06T z5$_Lft)NFy`~r)hi(;_*ryTSS_-x2LuSb_e-0)u{i!sc4& z%M!M#h5lH=R=3b!O4ynf`nw5R+d?mmercfq`WF*+M0=+gD%PbD`h)zdFU)cJ{hJ0`8kS9QXEnVZmGVle5>+l3)aw@}7_Mx_3SKe8kti zf90N!{JM7|_xuQ;d(R(4uks^-?w!RwKO*SfIo$IjgYKQrJ)+j?7`>M32esqR2>aeS z#^3#*q8gF~31mH;EP>Rz&-9}jdd z>EPpPd2cvK*mn`b>=Dl?;vHt%?cnC?82SZB#qvB=4xH4D*IF=yer*~m=UV8uCu~&< z{gH&NZlOP)ur)38za(sJo9Hwau4@O8F6Si}g5lWY^L}zuPC~rBHDGkVR*MdIi#ll< z0m(J|S}lY9bJJiy?}zK!043KMP!LzuK`C4Xc?tQoS}&phu~|yx+WWOyFS##Z5;elF z)lvl^#uP>aWUNpGq}e9?8G@ zbb@xoDdSg0uRC|GOtY6f)o^^|#{&xU6h4?i8?M^XW-#K~*^;8T);#K9Rnhrx*YCRe(x8X+q!#2IV+W89cZuZP z<8`TiEB>Tr_Lo|KhbG<)7@fYN?3nY$*cAj#X3jmeowU@hz|cq6Ox@{eG@s4;p1w~l zlV&Ts!!vX(qLUU4*DTJ4dtfN8dlzh<4F}zQe#eZM>R4(Xw2PAA5k&>bjTgao0F|;u`|?jMDeR zQZC;iOSy0*qG~Av7;aX|;QMNskLlMXaqeZh;&}wF>=ht4#Qt2C)b*+2ANgUomV8qT zQ*)`Cq!}VY*QbML$4bsg!K1fuunj;w^$W2cefq2M8XM;SY+2Madn}zVPGt>`@s_qO zrxk8kQ&ZJg+`OP3RZTgAv{69VWwNjS1PN$59VZQ{^>j@RuEmrbLUFKZiq)}`#u zxm(sIH7i@+9W5{2koApWKBOCl4rSN!W2EuX-QE)Y+%RZ5n%=(IIn$da-O^8zrl!)M z#-M4X5ug|~4f8?BuzjH|0maJOU2Pe_^~Ta0`6aKiF^xXR1Nw#K{~;|rRry^It<#wT zo{{Ezwe_?&%Ty(&W=l=aRXfnuht1CbYklA~8169K5eW%_7>WxNdt2_!JvZZ|Hzd zTM>~$UfDwbM#AP==u;B5s)c@W!dAD?ZNk>H z(3d7`Z43R0gsp3#zml*cT4-!*XSBSo`n73Iq*kO(uwR_C>~Edmys2dm>sBmY`{BFz z6!YWZyWZx*cfCCF@&*|Wjk0J%_xIuy8ZWEAUOqfY)FI!&G_v93HgrNiA=zrKg?@Iz zR<+PCOqfnhNBWfsThl^clCZTcG(E{CZO~szd`GmO#Qw{Lbsd~scT^96RGFR~g5-K1TU^(DhCq{;gYQGqA)NJH@UY^kE-D z4;_w+^sgjrRSSJ)!dAD?Z%&xbIY#=Lgsp9%r{lWUdq*8?<LV`z35u3;m3Qt!|-Tk+3x_^oJ6* zwuSz7!q&CW7{vOwmw%~?s>uJfLVoC5rLyN*=!Yb1RSW&xgspC&Uz@NsE%X%$TiZf^ zFJbFi=yCGT^qRf)wn2@nAJ=R<2>od@1uaO#sPtHE?d}Y1yCr@}zUq9QX@v86w$Yz( z^ii0ccaG9n^oCxau(=lc`3YOqLccX(t6S(VCTvX$y*z4aXD*@FBy3#^jYVqS=RZA) z{P#-rt!$y6kTA`-BK_iot!km)ov_s{^p_L1riDH*$-1_MJ}P1BTIg}|FX^>=&HHLx zeeav;l~r*xTmRc1LOnGJys~AA_Ul&@W>&U~@vtoCV9X&nE6%T6)`ocMsn;gwrm{h- zOc3OL5t?pxOtmDAPM|&wLIO!UPA{rT^paLO6@q$$Xq?m8cBG`DfclyO>MILqFhKry zNwX}DK^*O>nJ@7B+KtoKJ!ykv37Up-G5Aeo`?{8UZ{x5nkCwFE-dHb`I4ti?ZN0jd zvYx&c;=LrG6%Q3}=@~|kELR_UsFW+TQf}qL5Yx%;J`~poHmwVx#>=4e6_M$a@v2}3 zNsB7~Rf}Gv4)hXrpsz$9*(>THrtFQI#9%U1?q0bGLhVg}8FBA=_a9- zeAw5QGtO{Bks#m9f_x*J_MHWErO-R1G3NwG>>@+&XsPLyu|}<)AQ=azn^Sfqzu%Bn z6Xg?YVS#!KI1cE|Myj2qN-*Oe~~;9Mh2i*pSh|D}#sC+n}LxEI8_R6Rv4P0iVRKxSV&8l%%s zMS-TlRM=e)55TAZ*BWYDN!cE5#kxFYY*s z;ad4Am`=C`sZd1ifKuRsSr>sCv2><16YwUsDJAs%n8}qQ%}Q zc{G>O64VP6P%lwHy+{GYzFcka_oa@qCwaKm@{TqUxwzJHkJE>I<@F_a)h;}t%meN7 zPA<8X;B!lIEuShaQCU=t$gjC_C4Xh{RObH(7HGDSd0R9_WddwD?eA4F*Lza#`9#Lt z-E6U6oGG=OL-3`#?c%l|Zeiw2eN$*q5;P`9(YPgKm8Md9s{* zs<4wllYB}+SDV&CqpU(G)Vecuvuj|x0sA{ z)Vg1IwK|-YrY_1bSNCS0YJM$N3zr6P&t&g?^LKq5@m`sJ5@O>a@k8z>rVqMro0$*t*_m&9 zOX5YD5AtQ1Z?PrurWFn^8JtWJrE5<<)4P7V!Y_``>;0ViwHj4jrsh94}-T=7##6g4<8)I zl^Z^Y&gy>%S zNQNIubT55e!w)ICmp(H>q`W9b%;Ga6e$-L6q`D6Ux|dWZCNT2oUQ!*5c%geqbssp& z`iLNmNV=EI0>;Rsdr5UL0TidmJA$ont64I(aY8bMeDtp#~y z1)(Fd3i2ZQ&x`QdBYX&rx7xrCy)=!9b1n2QCTvv;eV>G_ZlRA&*qRpl@d;boLZ6th zbuDx`k->rt^f&j3jK-Pn^CIZ*hfzOGP$0R6&x)>PR7dt&5KPk{VRg0?cqU=8h9LmrY`cpehn#g!|9dQ|kC%+zz%LDTo>-k`RmJ0Joh zajQI+0Y%#y88=dUWHh>#Eg#Ia+XnTUPAV|W7AjpH0 zlqWzkT#5^lxTY8jiJIbqL<2qhfgGdp0k>GH)0YU&wd}$lErK#MUASVxrHyC8se-}s zzkSZ&9+@Lhv%L~4)!Ggf)1uF(Ub&^;D|@|UHszzuMhV>KtP5?6HgGj9ek;Zaf?(zO z?vlncjdJHcXWgA=dL>q>o$bB^g{*{ta@+tTb|4mM0$-WOJI3rlZ>sAkX;|A(+bg0+ zN&E|rZb`i(qpv@@C505?z3}Lk6xUD!DI^PKA;n}l@RCA$p{mWxZ4m)!nUl-ke33O5 zR8BNPuF^uj{_>ueV%lt%O2Z;SVp7y0RQBM-?u7b*R#UCG-~}CZqjYtnBP~H8upe zI$~mjM9D7nM%^!pSHqy+k?b-L`JM!Ag+w{aiGrA~vJU7bm^vHLDO8@3h;5owj;dR+ zc+Xo>i_SxSBSBjs_b-ffailSpm4>xWF02Lp{A?}AaYnV`@FJX9>nO;_6h?){_%h9J z#oNy-*r2hly7)Em_SfT8khinRk^4lTy4{y~Z89`fH4v;g^| z2w6^OOslo}AQ8s@Olu*XZ1qFW%dITrfn=>6Vj_dKKLTd00jp#b!!lb-XC zZ%_Se8)VIkvQFDBjn4Do3XInG$zor1F~if`j^-yY4*H7ioWBdHhB+k)Jv!&m0 zdW*)e=|Nt`fpYQ!hD1zvec@%EV3_=Gy%tS+jyXDwJ(Mq0TPwcwz?(}9ltnybKR3q^ zpIJf5=j^86$=bh{@@|Ag97V2valQCs4X|f9`EiL(z;20#sQ48FpR^z%Gsp>oq|ZxU zx;J4*5G0c=WrQRM6vGovC@x5p(@+FiSO^kJDI?_9lW7+qb9~$4BaB2veXcfbcv9vHzEQ*T&QFqb#*LBsAM2TXbL6JB1|&^N{TiSI&vyQ`!FJg5=b#9h7w58mVwu|qEKm( z8YL1o2l4Hrj^NEz>H7Nmjq-M_9NXHrXz4e!D{WQY!|$oIyysh}ymx7A32a~9qXn>a zc@GR5@9RDx%fud$`oK_s@OBFAg@y3-&|akQb)mcI`QCz|Hf)DihuTP8{XfdbZ7*rM z!RkzhH8=5&C&*iC+ze)D;!UwM<8IHg@nU7fd6`GwET+^kV04$;#5jD1cpWsq-9SG& zV%mr}Fizv|oTl^J=yQLUA;Q=GX&-spLn8Uu43*WFGHYKfYH z%5shFHXoa#qC&ZbZPb8*()CtRR74jvX>m#5T-=s^aXsm*_=iW?PESVPh-}}CeR$07 z|8rulQ&R4E$gJ$v8)HFPx~)ieSZbf%%+RDeI+ja48b$ij^>W&EnNX|UQ0 zfR?wPd#ZUnnX^Z2f}}igb-9awYNE(bC@kmfHI7Aouf$|It@`i9-jTb+any;_l}{L0 z&j0G=+}zLE`!0w%dOzoUKWA^rYdiG#3Zc)|F@B7#c;S-9GcgdGBIRG7Q^S?^drBUo zXL==8stre1khL}+ximUFzFN*5{H&_H=f#<3UaT9`$9NvbTT+vZ?nuQLJ#NJIQU+cx zpLsWOv3ISoXH1ux5>cB!cT=Sv8v&p*&N=aGT@lSyw)$m7!klagD|7e}p(+~M&CdD-qjLtg+m z@tp1h?lr2H9<=vm2h^8bx0G!SA@lC(i-cw|`!Ry|^zo5#y$=b*}KnCkwB5@W_#U@j!R0=9GYuEBDN`UTt$iFYDye8u@dJe zC60$g?&;>VQ(F>QiRadpIKHC9@iirmuPAYRO^M@sN`$@Sra`FdlJMIgvz%w{XsQ08 z$u~AaZjDg)7WuGGHhS}(Hr^0x&?nwJ(@=Ub^1U-jv;c{)1DO*#OL^`kJMiEqCMg$a z^s_PqiKSHBkOYrri?$P0~zT_q$=PwK9R%q{So z2D&i8IXk?@v0367c2qwn>U4m9=SVMdKj<-c>3$0b7#Gniz0G+u;TJm5?oLrCmlc`0 zj<|hh%)LT(o88fLwSxUYyr<7vp0k6SfGDY-*wM{%m(6xrd)nH^4CIRld#hBPylr;n zz3eqOu-nIb%T1JU3kV&T>ytbu2O-gmYjMj9(WS#P0*Nx!oaOw@Cb&2pp+n0K$nPhA zQxqXVi--^5a3?Dcnh2wnAmqlVW*2No5P>QyMtz(l=3pvRJ@e8`K1F@?#zF1-=439`)GpX6Dce-dlFAk}=_ z2O@djR9@{j=9<^`a<1>^?0uC=FWV=97h?tH$IwVzJ$6tL*0*?5lgl&d_rcUZvD^I$ zF`!RQy3a!*p*~vqG+*EfMOlh_Mo}CzT4_D>*#56_?pN4^9A*<}a%&T2HA+LFtPI(s-<2)qA4Vsge`SJ{_6gYKaPm~QltLD)@ zr@8aEz!5Eb&>RWZXzSaHIInTp0BgEwMzkHbU>pIm{)z#J2eflgCN_45z1-{ujD=|`fhf#$QNbiag zAWaxP<3!`vx$!eVY?Ec}d$v))I+<;OnAY%7z&POpVpPND`n!PHf+4cT2V#cExT3?R zbsaWcv8`>>x(=JJXf3}7Ol#S+KH8+tUSDG&mPnQZVn<@6gek%Z#8ZiJzziu&$V}A? zrfD*-meTOjFB_&3*=c%ZI-_Y6{42{qvgWyq<(7xpQAn``T9YRHEVBWB<)j55c}Ro- zX_^WHf5Bt9{~rcPNKzAcfTa|z`4GdTAz=f)qhKTHtg@l6RZlj2jvb}ys|=DUl|F1GGS`lsIbvtI2SpD^ z49QkJkVL251J2-^b--)f{R{LG-Jon>`av#Mfu~!SDBGEa=?Gy1lF*cmAwJ6Z^myr1_188u zK5xhA>Y~dgWanc4Iu4!{GI*A)xu0$X#4#kN&bL!>C>6D$|C-w)dbO|PN{?x)g*R=| z(Y9Y=UCQ|U6q_Nm`Cz7qiE0z@rN$;R*p6)!eo@o~ldL7R0Pp5WWK9izxY6W7A9!dn z-ocObk=z5GTCjnil-YnUHd13Sh3^%0!8tSZ2r#A%^$GZVi^E191wu_3!3=*{>;tDg zIm`j~DS{JxsI&EeWegLrFL$;+khm>lnEWCh2If?=iM+DP<{#;5;A$f^Ej`5w+lzS$ z%-kg{?V7q+5;JwFadA#k+Bg}b$rUNC%YO-GKN8jRMP!1XW;8JuNQBCC0(^E6BH(j! zcmY4_qq`wJMmd7u)E0Qk9T^bg9;)Pw7CV(SNzG=3`%pv{79} z+E;1dJO#{;(|hTrDdYU{KJa28XRSFhf$IT6kA6VW6s>*rcn)N(#f2NHjA8jw%i zpI^rbK=@epT;tKU2>hD6Y}@%Ys~na#GUmx!fA7(@2xLVgzejMsr>z`ro-VHTM6*a3 zvCa?$#KHl-yj-Nk9PO#~rg)=y|1RE?b---(2CUB3_{Aa7E!T@}Yc^mFGk3=>v#diW zbfdlro%HX3W%QF=`vF^Yk{ud7bzfg7sh1{r7U2(O~D$*4ca^rWsD`M1&x%3Lh z^qdw=B<|&U?kMZ`~O7a#}y8Ii-!tbL2GTi_KM9(X0l_XPR1nw`Y6HJy&9%%wC>jFp%N@JKDZ?tL1qS ze|z=yv0Z(=&)VNeU+Yjg#zr}d0+}{h^4-G+O6yr$y;`6qE7+nY%RwPUm+GYXJEoJG zJTHaf{Y^3Sab%vX__Xud|)xDG@8vKe^@$+4IZXP!X>H^Qq&@(n6HJ@t%H_)%6ry#(=b{t zJ`wj5>%JjdU8({>|KI|9K)fZj+pXv$n+>}WI$jyvFY|F*;9}b?i?k!_XiemLXA}2p zd+gH_a$l~hXaJ+Qe4H9u%r09k>yXLIIxNu0ALTh{F)PI@nz9ZvKh7x6aaGGopgaeS znUM_0Y=|ezI=GMv((+uqFfGrqGGJAJF3PMq%R1T*<)7vQ?Ir1_V(IC9C1=atI>Z*s zl9lhdwx+~9BGlv8*0J|e2B+^nZha`!yB=Fp`f;Z2cdT!1yxa0>;-z$DrrvK$O^Is< z;S~w7$CC~8H|xkGH}wPsOhb%LZHUpQ4H1{(kcOCS$p7lRk43afJa^>UR=W~4*Uab#!7D4PXX&~j{YqJ! zdk0Qt842mAi`K|wO-pcb$NW82MMWJa2+NyPoQ?Co81GVezLk~8jOB@ZXzn~dX_@>K~QB$u9=QVWhAdM zWkUN+PDcz85>RO$G=>k;Kpa739U_brQ=WrHqCp;I##vb>Mo{{_bI2y+_*zS9Y=0$%fe8M2#)&?)Wry&_mq4lVGP~&a=g-kbvBi zlV!<{Z84Ja_q-5>!(?SfP1d+ViVYP~Y^9K56NMBNQ@+Ah-dXJe3+)eiTYA83$wJ$b z)?S0^xYUIFc@_plSf^u}&2Xvzx?tZ_b>V(~D~j%Jh|v!XF?ymQ()MA;HwB&Yz*M`n z>(KWMzmQ)C-0C+aFWeiMCN35VQYJHvZAwaW;uFe``X+R z<#G)b`PBEwrRQa>2Sin8zf~1YS?c#+TEVC3j)3b*b7;8Uf@V~sx@1YSY+34|m5BH$1 zqLx+2`;5gK>6s_6xSoKHVAc}QqfZ8hty^PJNz^W1ve-o_bsGVd_u4u@+Hb zAGFi>Uuo?}l3I_rX(-0Wi|C@*4Cv9tT{2QtYAPtX|J9ZRR^K!YkT3*p1 z`60+T7A44$2eR-!%V>2He&te5X*ia^Q(9N6kFjKdRy-6{Lmx**@==s9+;hn1Qdd6o&R#qJNj);cXhO>Gp1uZE~lEdCQJ8*J$v9ALZ`q|GvQ&7Hr^4G8=G5!3KVp zv-Pgvv~_dWh~Y!bxE^Da7i&N6I+bZhBB`cP?DPlqXOoSqt{M3N=ECT7(pp2nm^k$4^;H^zAGC zlO*33*GJqJGuNP)Ttd)Z&e{XwEz!|#MIYIukB;dEEnf=mm;BlmIM;5+9PP+DT8UYw zw1=7P1X8&c#qUTj&tV_OE?E+6A3mmzQWBMV9JNcLE#ej`Gd@RnYHu5+C)iOY1mJ%d zDNP8Jex4bDkC$KQ(ZA6%M_bcOm!_E-O_hn&9chE5rr|TkzIS+=2J<=kUS)clfo=Hh z?ymkn8vJI#2EIA70jI6aDh<4cyQH^YaEY=ty-@r^KF2_eQC_S;ozlScz+`o#_Xe)- z(nCJqRXt@sNB1awo?`%X9dEqvrD{OM>kWj;W)RM5P`_&7-ltxP{7$&k>$l zbC%jrRj1fd@;UGcMoMX#((h+R;FSZ6jkwN#(Dg_cF#|l+NgIJERP{48C3MP1b%3S% zc9O>ulp|jD%YevMP3t-|t?Sa%{uq)ze|xmGV}l)aJR=@EyE39$dA!xZtZ8|(CjFW; z60jqmp>^f)v|xig-}^!%y~>V4Dr+d_;%0Oko?`;E4d6e>LZcpKdyk!_`5n4-s|e4% zw$Ko(c6m;x)?KZu^WCo2m9IjXr8IifKyP!)fZpqv)(kA4CNimoSH;TCzsDVy#_oA` zl(7r^LnEcJOX+2q5%|dg#!fXtMAP{$U;=p5!zY(5h$ z_M2eU87A$ycGTbjBTr%x`0|1c{1-+OHXyC&3Pl}4XoX+-z*oAs*7rMf1dOVR+H&O+ zo30~al#Hx?#1k8r*so-M&wo{S7WkICaz!@>{8J+>sV;oawwltP8Fi|<=&YK;C!KZJ z_h0_XR9@+-dq7N(q#awGI-I)yVs)pgbM~$&V1hg`0>qkS`Zb!>d$-1+_J{r<_Zud6 zNp;TERZWQo%i;-$f+f{Oe^a#@pVakQ>QvQ4MJs>l4(J1SbC;gGt)}n-BaWEfD;N56 z7rGvZ@MYC=s&gy(CZDk&e>%}uPtwy@75N%5NH&OkGRoY?4uAw6}n%AiD zHytk{5BQJXfOS9|rV_!})8Uj!ds91iE9#nXp+N86L4B=*hz7jf{ke#DK9NbK8x?D) z?^;bH;UpqJW{hJ^-y>Y_7T^{q%>wClePzD=r%h|C*o2CQxxCFlwzwJN$2DCK z3s$lcM}jfy)p+eYKaEa!!BB;UDtU~L@9V(op79?M#F8>8UP4zhb8X{f%Pd3&X z;@xaK(dP}3j{kQHfQCrVzrcFCA->WIghE4Pbe!yt7CYOH7Gjq>+q6HmvGHy@N_Ye5 zebIZhd-Clb3PQwbg@3Nz+Tow8x8k3|6<2TlJM#}|rBQ?{idJ8}H71XS6IbMz6O%ez zadpcT%kB1!F4BuXdy>DJp7w`i<*c(Xm|k0?7BD^&!>-s$;qg9}UU}74yh%vv;05=x zQ?J^3jurl-B;x4@`=Aq%jKDLED6f%sMC?^t=^lDURfEYyIb zxaiHRwo;&1l@YwJWw=HQ1&+#igfWl`l?E=tuM6E%*uL@k=xz?7{Asj>a?0M38CPaMUNzyr{u51>acK#zWa9z6j) z`oihK8_=Uaphu5DA8ft8^E>MAkA63uzxjl8l#$K+w#C;W8}QZt@m1so=C<7|c}T@0 z4W5`uce8|XR6B88oJk)vxRxo^*8GL*u zU0{&8QMfjl|Ct$u6dl)g<$jMyG!`|IcCPao3~x0={DqSmVsuYK?8vOwZH+B$IB6>l zYlyLF4KW5wL%i+gRn;4yk%$*YtY^pO{H!8O$Bnr%{je z-s<;S9oVOpFUee&8~jWr#TLpF%*zJvs7DUUA(Jv;b2=VvBKKMjN=Byjt}BM)ZTTtA z1hRUTJwo6&Y&|Mmz~8a~EL_0-oHPr3hm+=kf8nHA;9Bc!kp(=~NwdHYJ82&H5hu+8 zZ+6l=@P|&C1>WD&&OGo?C(Qy`-iTeyVq_$pmBFmNg$+ooio<{`frN_%5L1AV$o?#U zgv8>9Nl{2Z<^;6@{2tF(^T5lUGz(+_B*K8>u7xi3{5K2aVnCz;_soL~xW-BIz@wcs z3uKgvEZ|J$0-oihdEnVjngy~_6Inopx4I0>_*RuRcxQYN&jNFYN_D!o)TL7!P1zp(0Haz4s5RIb~alR9MvuC9I-Q@d@Mr9h)P2_ znMY}?s>mNoV^(JDDvh-U6R^@42XC=pR$AyvE{_-!Z60rT9nFluhfv(5rzAx|+2 z#69zhSO#QTQOm&eo3H`P$%BP5T`6q9>rP4jS83p17)_!RxUZ-3IUq40!hmeusxa_P zUb6=zSxZeINm^@?lDT3OGk|55j+ad$ZJb;yY@}L}sVD%FOVtiA$y90r$(&LXNQM%w zn4p9d!&#lqUJd*7as_+!)@58Je#!insIk629}w#=YwE9_juN0p8F~+po73^!V3{js zELHC~&O6&Xw#GfvY26;Zbcx*dWx-nPdAD~{Gdq`@B(8iWuI=&})^lvG<}(a1CYXFC zj@y? zo6ihJgY8S^IX|Po7;<%S_G^}fJ&KBm`W?UWnFDeKBtMn6t)@U)memAv-kogQQ%Jvx1Ay3@CTshqLD12!`UKX9i%wPIkKF5mxbD0z;Td7D${iUzu z=a_y;%ECo>-QQE{+!})?XA*1lr)Lria^g~C#ei&XkPwk4`&xUB<@dWYiOcHiGl>wc zY&%pG#29WA5X9Sjkvm5`zcG_oH4xAuEk<%9jRbw7uV3fL#%E_z3~P~A1Y!d_mmtP8 zDpHx>Wr6WGzR5%SX^1iNG{l&68X~d7{M`_V3p%bL{-<>;y(N9(UlD`I&*({x+FbG70xs(J$3accZWI@hph)a!>|rqYso`X9hg~3 zu3Uge*osftzz_9RU=KLwq5F3H#8cAGq-PXUd!VQ@Z__LDl!FJX0 zEWi5L2)x)xBJb;4|Jn-II^QDj$3{}~z|+2gvI%&Mk(3SmXlL69WEWG}!0+?xppD!G zWwsUv16TW{(MGn7Ss1G@Mh;n8Y2cGRJ#XY%Nt=K-8mZAhfo*LS2R_2*ij6?_QJcCHNEuoe z%zPscwF5tD;*<@{9MpJ)LV3yXCYytru zkFv+Cf0FgmLaB4PG?)|LW?AfSeJQko`!d{Mkh>8;w&a`6q)_b7f8R#zPkrS2Eu9m5 zm~H@`YNSTm`>gPd%*QZ&nlG6o!%;Zf$F6U$G7x1$3&=2(HgpWX>-^yd0$r*y6B2}4 z)uM`kYYe8a({~vzG-*t=+LcVJJALPYa3xe5(feW2{}KeUEC3F~!x`4U^tbQf?{c`(m&M#6^uOV^i)~5~ikB$`io4U(~D)SQ+4^(sfKpvL<9kA~ux`oTm%F z5MYK-HgKLT{NkWYsbG%sIOMgH{y;;S&A=RmbGIqq7b$ZbYrL*}#?nnqj4L;#l|EB^ zuaYn^v9g+++$krP4~~xG&61yWGOp}$Yst@Sj4zcR%(3Jrec(~$2Xid>SxDbezCN(@ z_0pv)ESDywB5J zJL=V`t(r5;@VRE^>n-h?rG}vVL20IEVZu1MNjA6z44je7wLQB{>%#Ss7^>c#x zfSU67%0K)_E+k`h=;O$ch?S3BMhS@;>+56@Z5Yq`gZ!q~Ubd|@RZU;r%CBvUdL0Or2O`y3V$vu#pm8?%QCkcbvLw&bDi|KFFyxAJWq4Pb6oZtzSG*&z@v8`*zf( zgL4Zy1}YUZQ+rHKoNo=zMzkbNRooV0-&|G_?Z@w@DsBp~HQBX$Kgret;ofmm)K~NZ zxL?P*Uf8)cmq+kCW0Nf);cAb~dB!G3;cAb~)-77;0{xqOy^XSL$%ZwS3Xb!X&;w>m zHlU7USL~_=63czFG+>t2N*xn+kyKS%%|I@FnlB_qXEns=n}&#aEaMwu^iM-nV>|zv zj@#DqQx7Ay`?XLHNGIwy5i#r2*#Q{EQC7{Ebe1oEd%%1nwf%v`s=|u5yA`dzmaZ|~ zcwCk?&wo=2$W~fvb4z~g{0d`~+A#&li)HrqH~m*$vHY{yTrS1g;>ow8<%5G}J_ABy zt?sx!YjvM}cTnl*=O~v}|JVBTU+gF(Ec%{%a|3q?KIxaT8=^hUMb%ga4Rr?(XJP;@ zfgargJ(>bNS_8f1qM;T^I=p3TG^Zg(TN+|Cq#;Ht8sbiwu%pX_9a}q0*s-<4gdJNu zOc?z_0s%7RE67E>u%FMPix_aZN5vw6LgdOuSF}h-(Vni?#eBOQTNpGl!m#B~x22CQ zS#iIuxZhUX%DVInY8fDspHMsLYI|)Ry|#|lygNK2q$jpf!~jUt*u+GQ79?skB2j4@ zNBue~Zsn+X1-%?QH%wOUvBzF}?Y&PWN7+Gv*(n3vfA z9r(Qqhz!|*nh+UIY6MZkG2LhSqM3w=O{`4W2)TP6DYe;vWEoEg;y67eU#^m=a$5ew zMYK!9lI|r1DGf}hN-Ck%+4fzZJy%T0$F0Pq74qM%npEzg+@7}WHl^R&)xX{3zn!)2 zLEbfUz~h`Wb9>sEY$R7_B|YFHU2h+Fl9O83Ts|>~Ty8+JK~S#gxO8VrygbKFFk4#X zIW|>!grqzdZwr^_;_Z?0TyjDFcT^i>rTLx1>u7zVM!OR=TAZlS)Z zTb}-tYrd$c<1$bxPMmA2hRc2Ru#V<@-!A~VuELADulKq=AmZfNtt+-JTRk0RLXVA6 zlm4J(()w6kUbT!hHN(BaYQE8qnsmTe)RD__#mv-kk={0x(IAkR zh*AdvDN3hOJCJyOg?rJX11WM#Aibz7kRsoZ)~&XOU3d{m0*MC^j`p4F5rIT~-ffc3 z2WFA}niEgw2v=K+zb$i|D;|<6O;p?!NVb#beRY+oVVWtsC_aK!p5xvkPs*0(XeC>tv301UF;#o4GiZ)7kJ4uLsP7?4iPhKTnO87m=jUG?D(btI@y_~4gmFipk z$n%SGO&c5AwPPkVziOWUp$GrWSvF+O_MtOk%u=71QDrm&vq*n0m1il1tF6UfZzPI^ zD>gPw@7e4d-RvF^^*Uz3n4;q|DjsLd5|PAS8SgOy%X2Xf%X7pX5muffqKKXHT#TUd zT#TdgT#TmjTy(RH*+`NyUSK4qh^B;ZQj|uoBx>|WqT&h0T#`!(|0G^K!{|y>O86^D zh@MKk(MO3Iy_2ZX3CSz?fyaR5K}?#!Q>sD&(vD`G5Cv-a084YcmaWsK-Orlw`&vVX zV7s=z-_0Y*IzzSu`uo55Z0Kl1!zzEWxd+7LW-bgW#u-;JcFLHH5mcUwaa5ke-^5LM zE=EszE=EgvF2+oGE=EpyE_QcZ3&i%PsEaL6)Y#@kjjc`8*v>?aElkwdwnUAsO4Qh% zG#+RL&%4X=aNLKmqrgxWfBn8i9UnW>edXvNrA7BNo8b1WIMyhQr(p>XrA2osEjmkS zxQfR^l@=YPw9txBq(#NE#j!zh$11i*Nc1($5mK~VNYQX1VR!M&Y_KU7mtf>>_Ox?z zxg5=Gh|$o77)@=67<(Vf6b+FADSV>Z99z)v(FT0q5Tn@x<@|(r5k`NQpWdc5#iw@m zu}5ur#9Hoc$L0x%#ueYyA*vqhkB#{kb5?o|-vHzzI{Jy;=T)m}%KK&3dl<}a*$~|# zmPDrrDaNCa2E5WP6y9Nwao-yk;ScE1DbVo@5egmmFzBEY5wsF|Y%28FUg)vW(A$k2 zpcE~CLyq%Xw#H^ltli>|)3dN{h_S&9F}AiL#-=vJ*v^I+8`%(J3mf7wo@lF(qMDAoIca6|A`26GPU-@S2)fmSn!OeY%v)RCGr5GhkK>T1EUG0- zm+Mo+ggZyQ5rst@#Uda_UBQ5{a$3INot_ZD@vJ5Cnc&@OVtTro(BIOXoRoLACghQi z=3kqZn=5(6a<;0_$FVT0ZNd%a)%iVJsgAU% z1CNMeDW$ZSGL;q+rqbHInBS_yfyx&>qcobpv80hlc zYvls{9X!SxGr4-l+U5tInK8oBrT+`tEIs`14;ZV5Q!B~tU(JCJ{HBxoz;8RL_3TZ0 zW5rm{lH9}%r$}cGE%20*<+s!=E!eW?N>*CHAGCo z6Adx?q9I0aEN`Zn)%&%ge$X>l1ydwpV#t?$p6dbWOZoAvy)o^?>;~X^BPko07Knmq zf5$4Ts<7hU+=|wtAd?lHh%KYG=-S*eb~+#AM=J3kzuhwEG<^<`P~xreQL5YAqWbLi z4cV!dREhkkda63Xo?YeD<58;H+@kuWZPk-4sU4~(D_zp9Sh?HoJY$*P5MF4%4ZOhX zs`<^|1>Qd8sCk(;OgVPt>SdLFhZeQGk0sjy%}a3T=HoKZG2m2NU_p;Q?UpW{lGo#+ z>_kN}-^@zXD0gY|1u?ANX=g=o>ix+IF*rfp#Vgo2KyC`+bS&(+PdFvgVoh9hg1PLr zT-PNdIRgn8(Cs3*glO3yrpC%0*5`csdV56lOLmm2!%HrxDe;hn?3c1l#mk^V;!UV` z*-g<@mlEHB>PS&ZJ*rV6ng5E`XZ;%@iV)clV-F{x@3VIN)E|AF!SXYFUuGr>l-o<) z;y!F*uu*OZAuc<@KRAnh9k-3L$3Nb(a6QHzZO^nw`|=MQWV6=;QQh#h+tPXhbFgi= zh_*@Nf!HPu0Aib5eFE<&GqaEW-h6be_hJu-5%!$wGw2R{10A;zjuM7Ix(U`n_h_Er z?>B2l+AqO|11&f-XVK`FTSzO72GhE(si3N;kwZv+(}w19oT}odH%8Bskz3N$_O5v{ z@^#LW9baL>E{^J$sijl$0#N+^Z!;punrB)bmc=MP_`y+~6TjK4w60&>Kr2TLj|**S z#dn8E{ZTb^>T>Lok&=9r(4G2qs6-ovwH=)tRrm4=%Zm?^nZDQMqUl8aYl>Y%sEhl2|`{ohDbc|VYwSh&6uFX`e$lWYZxiq>R~qb0E?OJc9f4_{nQ|_A|&9B z95&mxU2BD#>?nLdBC63!VGj#0;Ul)DbHHrhMuBJ&KHv*WJ_-bw@B#O-SZnm|YXw41 z_<*m;A+>!Qg?AcJ_<$cM`6&EN<|FQwTZl<`;Da`d>BIy*1 z8tqZ=CXb{ZkVujXJRpIhHNgapun{U8%aF;@(I-0Ad35xj-wK#M0W;}=(2oHlDr2~) z$`~)gMrhELLZTzH+<+T&5F2kvag$?Ci+2AkGJ zIbE$Zba9jqJf&*^2;n%&reB_z?2stFWE)2Pt{K%3FS7!@-4J6pH^h!SaLKmVI}K;- zi-t&V{L;p5L)`7L$-a$wX1HV9as+Vkgh!yZ+Q=I~XR^7+Id|DpBmuzDKI3bV1 zOSX;U{N_iTCI|h`K=UNt3_I|ioh}m$uk6_ zj(;$LDOF=w3aLGXEVgHhEnT5|SDQIltTcf@6mpcOASTNnCcFJ&IS1}$AkixCI0K1R zd8iRctctx?c;FJ6QWZ#Kc1P&~(aEtpN*CHuy3mf&&Fv^%Xh-QnJ4zSYQM$Pur3>Rl z=|Ve77ur#}xgDjO+flkOPLxUyym(tXOc&Z=y3h{Og?5;39y3g@Xsv1p*K~ZojnY4~ z4h49qAJE(TIw8MNNMS;1vn z^LhxWzAFSzv=pdeNx-qnQ5vzt5?5&~bLnBFf$3sd$pf)d*#;e0RdjH4!>iGwGfi6OVY+!S8o*D2j$*L;TH_6fVFUcQezHI;rZj7uqw zk#(?aT!X8%`ad!7Q`}O*F3$=*P-*kS2<}TFt0f`vA$%VLCgT=CFdp*=}UZlxd^PCw29PO zEED4uiijuUa7iM*0FqLK3-}aEAi@RQ>ZFZ8(v0lQ0^jId^T2;_(njF-jil>Fru;K~ zmRkh=m65bZz?IK@i@+sL`n@=PXiX9rIZE0TR}0een5?uWY3e9TQ&JOnqLVfPNoL{= zAgN5`1OLe?s(iW#jary$ljA^0OpO4MHXk@ z%oTw@cG4ywnO=Gdn3qaD;7PuFwFqP)5F>zWoHq7Tc%E170a?&U)tE{5C^!D&$y`o3 zdc1s|YYias@^gxW3x1K&WU~&)WxjMF@G*X|J_qEQN4S7wS&;?o%A~LGv^fXNX;XfV zI88_2$XvjjHs?v3T;+%r?Ht+Kffd8Zk>`8Hngf#GL>BNZnF~lR6E0xB-kt+K!86@F zur4wk%l&_LwjPl5Ch~z~x9&_gN75tXNloCZEp2K|@ODq7Js^ouY65R6YJzXcHA$O~ z@Ekb@Br%FGVBRm71O8EwBf;cPsR<+pY6HL|JYfU=qbIsKAel_KfO~sRm;;iwgbPU8 zl3)RnpwtTRMJ}ud!YkY`oU_21rQWf|K=jsvXS9(xyV5ZdCL8y!hlGAMVXeP@zSu{jqf_b1J5*4hP8zON*e>cR~;|-BM|F(5>L!^tz z(+!dQN{=?gcUrQePsMZeC^@X*qqkTKHN@Bx4Y9orX+3fKbEFQdBdrH!y>oo@KR9RV!GS2V>r@_$3=xiM(5*Hch-jrf-NN-^ z58K{G>(;ZpdwZu?H_%mD^IUThD-xx(EUG?eBl`c^aa!Db>4ffqM&5lRLEd%9_l*Zn zl2*C~Afrv~VYqEC_Kq2D}A@J@N|j`mWiYaDl#{NwoTw@POfcvt-xBqHdV6 zDd2f|WyCafU!SI0>q4#htX9pLcFp#as+~1`w`+t>eG-JrH-RG;#YF+uK z-znI&ntF}#BU_cClSi&m%-RonsabKCjP%fTlra2J>}bPy?N-e^@v^r~xAF`I1|RDl z+Y)WoX?E9Ys?KGm3!Qid#aw(tkJ`IrB;P~{!#x&l7_Z%G$&+k}^+sRx%I_W9Ovp-4 z6L_>*%l~X^vAu1jseJ6lj>_tj6KgHXcqFysMb8P@be))7GBGh_PdGOgu)<5vz$z&t zEzOu@0B!#xRk~3*!Ad9yyCZ){wJ`ei#Fm>NF;o2I0y;Ig}!Y11KDg5E)A0MPqwiv zWQzDG85B=Wc0^2MS{gz%ogWO(|EW0I&5m^^wLk+UObi` zMP5_0cSO=t>tc#iTFh}uYkPbAmXXxRMJkW|6(UDzF&in3*ddE3Ew{3bX!oMe2pci| zG~X8ANT1Z16vIUJOk$4+i6Hqs-_U4%aG>iO!!)AM&4v*wdLeAHS;R9I_^=--~7uJJ6qFUM6$ORlNV&Y0RMIxtK}Ib7Vjq zT%N;aWXJMc%#!6fvL$XP&&8}+o}--{?RE*z!iC$Lc!TA%T+O`o{;ioLQKJVEmA3zz zEm9Me65IAdz0b0m(oZt)XYXI*q2;z6nIurUN2VTlXiW)k3h$~zeYRmIU#KFN5)0#G z10}XFlLSi4S3(tSu@8hQ-ih8%RQ%0RuORU*_lP8c6Jp%e>B#B2W6stz{UVn+xS!o| zA)$+7cg=pgX6t1rdGo$Qr`KdpyW=$~(Jl5~YoqFCJ~Q-yG-0YbYn!h}p5_<+t&N?@ zsg7$rTIfg7d9_{daSK5%@(3lK2=4d@h+5mO*{3Eq8ai64JxWd1Si(k4zkA+()l8gQ zXuZX+Q+q&~(D(>}xe;w2RUKEj?i&M|`A#!G^UkweX9I}}ef>FBmES*=>3&ku@Wd2- z&rz3XygaV%!o}?xCK4gVmz0DQ%~>vetCzsboB!oU^r~n8F2o?-?}XmBu6Udsp+D8i>`OzZ zHM|=E{chH}gX{=BHWfPWQQ&jv(GSquEnhCJE?bPHsmrmGReYjGYZ5iulBm&=M2&Xn z7q*tkZ<9v9|2iGt(jn`l$ePkUk3ESRtx42qOQJ?g z5;fY9uHE!~C_Mb%)WPZY3d-nKd2naD^$atkkhs%|Q-u`Up+jV9Q9N4`iDI1mEIkCm5qEFB)mhfkVDgYq2O zIm%m!4MZM08q$)X`y0q-mqK`D*MkyTlLYi|)K;U5=fdRPJ(YQEOGwn<5)~*qmoq zs65AA4c0Z~x%d!Gd5&A7Jj_y_i;ruT=V&v>N!k3f)~EeHJAn^)4@Y`p=FplF5B3Xn z_R!X==|Yt&W?IdADv6g8Pw*$Xl%8hyl@l+evolq47bUzYycZl=<3}FZPZB8cu%}Q( zLiAnYjb2Ms{KQeCEc!;)FtJ%3tF|Q}%Bl))5>sVALEDu$!#0sIehnNM0Kg{edqV&+V`xNjK!7a zoT_@HjW*t{l?_rLPHSGwU~CP%l*%CDaiWG(JGcBBu4y)El9d>G&h@oaKWZ7VUOU5D zgXyv+LEw{IU=M+d`C&pJEg7<2Bc8g(6^h6{<(Mn|p*XGAkcPFRqBBZQyiu6TpYvJDrkA9r!ULrO$m* z`c7s9p1La4O^lRYXH=00oLpTp4%(JVSomqTa0Xabo@sewP*_{cI>h{!OYQ?{n%cjv zrgV)rv=2P9Xz03{((}BbePC(py4$d|s@m4B$J&p$5%WOoliL^DCn(&>ZI}n%r7(7V zP3f@A2wXG3NQowN%)h$Q$$wa1o2k0T4*rmvKL^BO89G30)0*J>yPb1DER&i*jO@CL zG1dHD8FpgjI}0npm?j&-Kuo*Ct!!R!8StlCjJ2P!VAb}4f9wI=1Fm*AF92zP)&vvA z(kS59a!owX_|=-=joupz?Wpe&^*+p{=BKR2s2*x|5%m?Hj@Nwf!1oFdfDdq^=YTX@ z?ynsTzO?9SFo7vu4a61NUT}8H9B%QD6E^U1?v^|W~uae>VGKw7RfM>U;xN>w01qE%@pp`kQzZf8HXvt#+8caZp_ zd32LX1!K5Omam$0)3HrC!PuENu@tM6Gn%C|Y~aXe%d|X>U9x2H7jJMZ7Ij%y^6#pR zmW2uDQ~UoT}=|nO!LjMdYk;M+8qf}ZRGd%)a^)}$a^ifraZAw}7gA7HYxz=gJ37TWDtpdDF9>$b*{ zJ@#nSAe#^^FRY+3NZ6nwP>D+DlrgfDMVmMd(=Qq5&+b=8%|exJu&6gtqt+w=Jsfqx zN?V!gBwAwSjsVgP6|Id;qX+R)3mt6L@c}+?cv$UOC>Yn>Qf1(;OU5Y24OEsw3W)KV zIYyJ3g{_F)Ie}!n?&KFu)_#fezdWf&Ze*hGcz91&71ZQ1mN=$5vm5lNy-P-Nc$AQ+ zvA!vb@(Oe4p2jM$}BWE$3kZO-myENMyXP)qmTe2=uranL>4QJDo^Yos)3Q~Gjd1pe;5 zZfm1NwY4?PbZMHY(e!oKGy^O(wRcq*#Q%ARw`sVh+q+HWx4Wx~mOa~CqcH})*xl8C zx4};pY~ZUi8}O!r4g7s)>)m1y=c`h}ha=ZL7>F^-i#4cI8koMGtd916AEk%um|fLV zUZLWc2%E@&?nt*td`-)-Obx{Yw1DyP-$3Chbe8Go*Je{cFyQ1)CehR5mHpr zvE`O@EVY)L?4i_ei|Zrqu9ieb_yd|~Ut>`10o*tp&w}Sg6*|!DGwc9aA zJFNWJ$0+@qTrblBm?nr3P=J>IU)l=qkbdSm*?;SN6qI^mIT{j_w#{{ltiT-N6qK4zPJSw z7@s3NRsCyP#Xs7PlBR)Q_(nPX-t*-`mtf$^A^SvPCUQi%m&M5+w*! zP9z?_lM+)pygenRgm-&Nln=bfAKiGqcjM_aI``G-(Tfw+>CuVOuLA;!xgz|sj(%H5 zzpbN{a3&_@ouJ4;KQ7DL=B#G+L1N*LZ=;7 zga6EFN7vxbI_;Pme2df8)?oZSSsm+P`^+Nnz^`@M5jFT@PCK#&f6Hk{)!;pCu<3Og zc&*cpslmVJw6!&ufvWb!-q&qF{s^fB52+d8+l(|-oqJ0~3|#5mG6ST08a@j6NAB6Q zW2N;8FkW8AnkTz8>w$$e&!51WtYv*$OZz8xi%--O@j3ElfrX|QyQUv|=9&f4RB88% zCn#i#W}`(7AAaY!$6kBs^GMBTR2m-ODERHA|wLH6w;_Qyi(H%pcaIPxE(GR;UPMj)_If_&DuH0ZIn$Qdw{#@}#tUa1%Ix-Z^ zW(fZ>4ZV<^w(=^WCzQ!lujze0t`4{sk2NPv!%@I`h5w0t)ZQe87)n zzDq8ka82d|ek=1`b^(Q3Gaqmt>sD#+_6sNwJK`6@gsy4)*YXxN)V`= zNc^jvl$aL#x2MFk*uOm`ra6#q+~2$LbQ+!e>h$Qv5leFf5_1y#z^tR+*3ob4*rlcU zEjOhI%gTC3e>ah~*iptZ@P$Uw&IZ5BX-CxHFF5VU8vF~V9aV$x9ke;RW9ZTxarDD3i`&_yIf~~k zD`}qT$WSzsW3x1;!8?jsk5tz8G1CKP@5|Dh!dBx`z2HA}+7UJQ(@s0G2LH%uN7dj1 zJRcohgCF6vV`}g-owl|Hzs_mL)?hkQm*({54bHcw2Ji0q=!hD8w9}5P!E;VKss_Kn zX-C)KcRKBu8vG@vt*sr~;zV=aq+ybd+8oE;I7{<8Stg>hWoiB~>tedCSz12F{QnX= z%CrT1gOOyZ`ZpI+cyHzdej@W-bs>f8GavA~neXZgDNI;Dh+g2GjU;-nyO6>mnGg8j z%=h&RDXhzUz$azCn=YhqLFNO#GV|ShAq8Sb>?2I*nxRYcy{!-T^F`+@@NPyLzBF%F zp6RMQd}&^NF~!S$?I^hu`1tG6DS6Ts_yi**gDCxZW{kl%Q5|7||H>7#KKYd@9o%L- z#{|F574(2_F_Luq6&FOUY4v3U%{t2O+HI(_#&qr zS%cr@w4-Y9SDbcq4gQtWj;X<`yzkc5U|QL=5F9jrqWYP6<`9>?rUq|x+7UJQVy7Kh zgFoQ3qiXQKI_>Bhyu@uirUu{FX=`inDEpVX$1_*^W!WyS_I2fwmMlqC?YO8aROP{Q zgbyBurFML*yQH&b$3i(OXK%xu$- zXsMVU%rma;Tc%ds4L;zXlNP;R2KStHWDS0y(~hdaA9mW&HTb(uJEjKj>s`9G2GfAf zG$|&1wB@4p(M7T}j2>F%ZAE_PVkga@^um95{I3V1YN~qHwweMWr?qP?U2??TTaI7S zQa>c8Au11mBYXfbw7PRzSIy`JEpIoU@9+?t1-`>b!*g1@@=RCd5jpJZDru*5fl-AK$S*c^n<>|t%?9X_;hLU!`)FD!deDMM?Hf$T&aVEF<)7Z3)EiSn z{*Zi_wL_(V&v)<50pC!tf&VeH0l!wTfp2lP9`GLS^*P|7PU-<4Vx-CHl^ek)I@=t6 zc%ie&ZlU3qIomAo-A;Gk zTm^ouyQ&ZT6DQ3A-|wV8@Z*Ir@K>F!2mFzf`gFyy-rj!naT#o{DO?49bFK=+$yyaJ zU+HYK!0hBcPX15l>H!JxjwhaY=rE5E0;4nXjCIl7|p? zU4J?K5~nUy>PX)ctZb_kM_Q*DF5hC%zn8yxCcc2WOeQ|7*jM>qv9d)D_V&RTvk<*%-wVrA9&Y^(O1#mU;ZcMItOKN%P>TyXW=|RGRkX5fakQ#D zXHEA*m#ox^C?!$7q5<_KwiL?~Di_O>cFj1acMOi5lUec1-p*A*?a&J>w{JzqTa-jsgW;5&JdEnt& z5-Cl`l;({ps}0~A1{f**du9ZlG*?Qb^em%_MBobt7%9EX8E1i)%)8mZw;HK?6`>*C z{PE7jwa?NYZC8J#<9%-C{D`=#~I!&ZKN~1M6UTIO2(#*qt z;B|o8x~j#F*I3sy@(sV$Be(~=(n)>bN1Zea{1+$nfm0UxDj)n49}azBmpd2%G6wO+ z_dV?Ug#B`hTU7u)z+<`J9tV9Q{*t05_`P1U2fWfrv%u?})CYdQ5C*32qye$(I`T?! zIqdVMcWVpKe}8K(*XDzN>D@2~{FRetf%o=am;-*Y=qxZjB)J>-^MVab2g-ID;e3*H zmYN36eL6>EJ82F`-)j@vo!`1j>AHTRiS}c|Bn6fq8lWZ);85-Q`<+CzAva zH)>V#r#yBBk7)Jd5Vh?5->TdtP`WXJV)|6 z#9D$p$_#Jll*!hmENH|Fb(q`8=4G8Ydr=2JakM?DJo}eaykFSt0R8e+yMEM)5XF3ZaTNO7uaJ5WO!{(T3kSCSFQ-U#Oyu z624DVN_ag47%k<+NG;FB$Yh+xC@ky5SfoyjyRuG=()rj{g!y6#}Y68;HV*tZ@3_n zNbk6EqDI&8Fw3qFwWC}cy=NPRGySSzo>ndT>^qO~d**GQlMFsPleQYXIFq{U$h3n^ zX;wblRzBNSK8y0RT+=KNdsb9a+xuzP3AQ`23jA1%L zNQBxaZJH9&Z<$(*7E)UW(hFBaCdyB38M4qeWT9=yLfeqmCq~inD%0^=JIb{?Ft>lM zt#+=hqm__V$AZa4k3@6Z;8xAa3Li4-b^m}mt$_Os>wzU2@iiqPMJ6jCk&+lG5hTJ0 zM1NvLA4jGf^b?!1?+Zj@5qPL0Hia9A+JYNh9QhXCf2U5>J!8J5LGpVRGz6=M{KUm# ztLDab&5g8=qYlS*&0f1^>!Fe+8HCkiIeW$Vpgf0mj$N`OcgwsKr6el#I5rUyY>~VW zD|e&{{ejl1iYr@TJi*d68B}*S;#AZjPiNmKjd?p(hfXUvcF9OHS(MN{zv&fLv_VXb zl{>80UjnTv)0j;N+7)u~0X*!&v~ak|j$#q;M^5SkZ#7c7 zc}8iUi@3|y2Oi+0S>TaQ>H`;?Gz&a+TauMDP+DhHu@3mY0Y*xn%#6U#4={%24;0(J zm}&cBLzgdRYJ7nq@-RK{Z{4ODU}@8cCtS@s?D~Lr$T}dNRClebDd9|cdKri(6C~1NYY)-kgT~#^Us&^J&QMwbOe^ z?cMg9$PAodpsDzy^J&P}Tm3yXhZN_b6X!Ay;lF!%;_l(T#~5j4b(a2IN@@W_vd}>5 zNkU}wfs+t7o749Y<7QVs1<&Djj>`(iKi%4c>z7KikJ!Jah|>qu{m*Dcyobu5?h570 z&EFcf;D7LL=@Y>Oud)%q4>X_3#wl>YNXiC&va|J`ZIGO=Y`ET!x*(f;kvX5E1kGhe z;wYqd8Hr=Z5~rHH(wI1QF*V9RX^j79M_~jKyYhpERSe$A>N#%vAfPrQKm-B{fd_R6 zJZMl*Rh6I28`Yh3oqBehzEeIr?{}K25_+L*>+!pEJPEn?L1}8i-TVB{ikL zd@3&90Q?stB}Pi;J4|;De2nY^3!5%n1DO03)T(XGY)+1B{e@o*98v5&W_uO5-`_Nec z{-PK<>uO4j7g-iv4H6^m4FajA>Ng^czUKoLd zc4DOTbdTQ!;5&*ST31sd>O>-t_(~Ef5n{p!B)$?Or6~`h1>kfMZR=`Ech8K#GTPd^ zva&~&Ld+i3&sQ}Wpb#$z|VTpo+IMqz3WDt%$~qEdd8k3V}B@< zfFE_zEE)U-9)@$*8@w@-NZ+sb(3&IKZpkSesdLPUBoBkIPiHCkyuG{hNrB6y7_)0s< zwmtC8Mp`P{C}&rzDE@io1isHm%M<772?!s_yuhmh?<9n)GcWL~fp-eRH#0BrKLYO( z2tUibz~vUm*t-%Yo z>B*~@@sA|-9h(<*e1mUxeSI?4%PsLJ8~KS0B$q)zl995JjX0Jxrbej>Btt1%Oi@ZB zM|CBn?2SHqAuYtEH3i155SP^y7^Fg6UQ=K+ z3URuoz_1hIikbrBONhJG6c|WCTv=0K#0YWsngT;Zh*b*j{TU5b9upI`_J|?k9IX?B z1nhlTu_^(xI*|=~;1>!u@aKGuya@b!N9$MH>P1@xUgIm89`H*}S_HDl(VF<}6kn_? z0_TmSY+y2ryg|g8hRmUC;1hgNvk07X(iuQby~ zy?mjw2t3G0$_8ftLX-keDcHa)pM(u~PQeBy<%w-%JXY;e6L_JmuG9`N7pKAoWD%xp z`cxYElS=^60A&5IY~UZbhBJVSE2$Z?tdL@oRj#3be_=8I0Xyzq zZL1!3;z9eTo3c=^v9tSB7fml)y<=ioW?}rZXzyT&3*rtI`j91X2TN>1p1=S1wxM}J zR6oZ?%F{*;OM1}(Bg>>dwjDL1z_(g&%Af%5;c0Fj$d-WC1kXC#0`QZ?VhPNmNmc>C zuB3TNF=c>RR7q7}SB7MFL5%|+=UHy-1?NP%Kq5WEGNdX1vr{3q0bgFQ zwbSN&Oq)_OW=&N<+GG+|8u(2SPn}!_IbI1@0P;Yyhes!4p3CHUSx`@}kaV+bA4Xj7SD9BU9yp^C;cKDE&oI z70iN08~{AqN9lQ09J#_42d*k*`AFRa{FbwwS1~Mi_aV3mcxNAi=T+=wcCBW1c5pRKi^EHs#`t2zB3=gOA$MLC zhuma!Ud5PWfT=hi3Ll2`A3jTw{C_26Q3ff+xNq=47^fSU()jjla?*vKO~ zhEMm=)dxP_w=U;_U4x4OBDeB@$NJdn0U0L31!Tmi3r7tZW-+NcYAi5ysT~&XUBiQ! zOSOUtb*TzuRVdjQ$f{jyf|;^}EzVfV#+3D59~*rj!$x!h86sNKu@9I2q(P=1sR`^F zE!%u$J`ZF7iM6k{vn=;jCzv543V@6lWdk!*gsnYN#@kI{=j%|5zH^GmBvF%yOMl|A z(omPwB`5Bt}ngzJJu+f!Gq7aL}OPxkeI?C;4o)DugD z+O^rYtZTDxdDmv&bk}CzimuJR-MTjWR(5Un?cTN7w@24z-=1BYeS6hhKCv~e9%cpe z)Zz*POsbYhBqT^zO-OjxC9s$L>}_7UGN5-Wx)aQ9q2xp$laUGrvwjmcAm)~)XES|Y zd(=un_K(vC&v){uy9>nQ>;1k@4@d~gy$0aBjjQ=RFbagI@Bu%W`6g=$>`DtC@cPU* zRa0Q2TKIrJ$b3s`3hZ4AA8^XHEycd2H3hb_g%7x2=37=%V24}yfQMwh zJDG2~rocY9@BvTGd@E`SY>f*aa4z%hR#RZNT=;-zX1 zUy=Fts41|$E_{q5cGRbs1n~4_@MU!++Q(Gqwyj6t6Z|S?JrEts<<*IE_g=QD)g~K%{Omyb@qu6W-&DVm ziMh-q(pU!W%dI7n(tzBOZbm5uhOkrxzBP}kiJAg;sipE{O@VPOm4P43l_zTo+_sj= zQ#Az!yHo~#CRd)SDR3WKDle%ikO8DJ@LzM~B{c(H3iawR0jSeS6*6E;7+$x zURF~eS4d^x$~-)l)fD#1#N{;w5{Og=9$4~G;9j_Bo~|j7RirZTh+KKProhc{sl1}5 zK&p|-z~9Z4SJV`^TP~G%t0|mjoKhLMAy?k5rf_;DuB<7Ll%z87jFOK6_tQo5?llE6 zl~e|vlPm9DQ{V=>RNkYeK>Cu(z!&Apd(;%T<1Ur=tSRIaunx#kev4+JwVn_qvd^_)OnpT2q7BYZA_CvZj=;wl~BpjU;l^-c#3g#aDfIN3LBA zb0v@@?&{`gGMr1)>-?%=O%3K!HE~kf*=vbpCB4bL$N-uTdOxI|$Rrq6#<(&P6z*gh-I1=`(pmyIt3x zCO^f+wI1ZwNR5W*w?Lz`uJ3+MOy1M(a^-u;t$WhcwZv075ym3`ci3eST`leMiB_0qI>h@JN zCA=ckx8yYj{zww=1h@ARmC|uGM+sGIpma*6iZ)8~nJU^S;o&4V`ZiJVDtEjRl~Qp% zA#$Ua6L0ojLTR3io|HjM!?<-RBp|KRbyECGlOR<30{@mhJxQHuO&-XJ z!>QvLozlzH#Gkr;jS-|YT26E*ji})HC#4Y$j2)%LC{S9_!3`W`lPpl8NkWPi2`L&R zq-c+jqB%m^IcpZ%)-1NIS!`Rg*tTY|ZOvk|CYLX@+2%5T6r%^E17%&@Hm~&rpm4Pn z5Bb2r<4hUKrEa@v{dUt@;!+O7(5~EdoMmvlS>_8Osw>ZA4<#hI#7JlxCr_ZA(LQSI zM{80>h<2zI(E?dIMMWK}spKoH?(!8@{@T83jEWu5V~h{FzC zT}Sysm1}`0J@H1lx;V!6(XNO!(-4@FueqTAv+l|O(*Ui!rG9dA3t6{Mw9{PK$cC8(uk0T@b0tw6<-5#2dH_)ODVm*~dSg%3M4G3PAkgs2_ znMpAk-+(Ai#WtjC#kREK)oC6&l*o*Ng^RZ=c*d?He$}XGtzIlfXTkWh^tA)$t62ZaQr)g74}Lw?Hw{Qw^?Jz%!PUm3vNB5=;`;yl5Q9Xgud z2lDPilQ6bh(We!N?GTsyNj4=cCisqoEX{#DvX{Paz+{HyxB1Bh7GH@Gv)J#p&nDnK zJL)8hw@_bBa2P>{mgj<~=7*`HEXg4^t@4Lpk&>vfzK*z9Ujh^p{=^@>XnjCFB@pa? zxdlXND|eW9Y_~keK0iB(<+&~!WgFTwph?>EoqYcS9f=yHCu)?d5rR~ngqGnD%@$Iu zIV~?+=)54e1Dk)jjmuH<3pZ^4*q2NT+@gDz?a4|Q^6iHu?&x_Sb_f?M@1ObunSBN; zp{6SN>;ez7cUV3p^Q;cEXdN?GvP*zAF;Szw z$)=S$(qc=09j8a#9S+`o&n7IUCYKNl9JPlChBtXoY$6yw=s~fG8*d!7CSA`_Y3)W= z)vHZ18t4$zeALuHA4f)Vag@;QcwHt$8)T=A%0(-q=DnMtv{V8VkFluKw$h&Wxaa0S zYfa(Krt}6LqZ=7D>xG79 zV|Iv$c)7UcP7|3&NVJ17CnWL(kF<7N6)%_0nP^@T)vJK037?>uFozxk0y^fsJOm}t zg6H7Jc2XpC#w87a9zC^OT2R`Lzf+H34O$ZworAe4YV7XQWfIJKbrbz{d-hC9H$)84 zD;j79!$e5DN5FB|Sa|oOKl}Nhco2@DR%BaE!Tyk{DNa@~26-MCk1B{eT%#6UF4lq(W?HIQa z_;e#B8z~*R))|4HGg4xt^u^2w{MP|SN)yMrMBr;4RJNMZTZ}5L2LAZ~Bc;z}M&Muk zPAQSnr;RESf%kZD$w=u~qY5K%Zh(=}(=sEl9$=*OcbO4*!vG_t-5=ua0q$d@5rZhQkd$9A<#0uAxD5K*CiUG*eT0tOxHL zuvFjv_+a_6$8ghR6>b)+wWH=W@Wb7@9`IXE>H}|d(kyVj58giGnTE)+0!TwtC3x1` z*#|z=Nj>1jKA!r(H#?~Z^g&hif!}kkS>OkK$n}9&IB6F61Rq9y;4_@m1773N)CYdW zNwYvYuItL%U(rc>M)c0u(!yuT2F|9p zpJ4FEJK63U6?QrB-fT01ssV5Ib}Z5ka=WsDX^_lsz^=BD*M$wZo8@zr1}3Wu8<4E7 zY~bvvMLhNG2c}W1Y~bg4bSwhNzsd%_uV>vwAbD2Vz$99+4M>(%HZTcQ*nrQo_)|9U zWge4@z#kWEU{aq*10HHAPo;r#OtfwSF7cR)na;ozUX~0T`sSl0O@h93VygJkRI@{Mv`~yue*roII(cl$%b*1 z%8O%TLT~=r4Zz)OV85~$^x${;px;2NIjUIjdG4GIIHDXG1TMq6%c2z0*ojSVE^Gqt zaGTZxF|+XrMxAL!sWxynbp5Uxns(Eop?_K!3dTC=V_;$E*Du1*XBUQov!T6RHPlkN zS*re({|80|jkvAjovm?8kI0D!ywPaVNZ?sc+W2LIG)Mb_l{9g$H1Nf~7VZJxZzSp4 zn=ZNswE>3pVh-Iol%eFN=f<{)o|}UBE9mY4J-2$+c<+m^HKH z6X3@@JNJP9kG(g6m#nA`|L^O!%naL%Iw}~E%>@yWMG0?&|0#1%oqOu+b!xe{yQ#=>gbPSTR%XDz6$|!ez@rV-I^?C+U|Fqwfj<)ab^%#x zi&Q`gy!HfsQd}W#0qjQ9f-nEt^D}mvb+Y1s?-1*M7m#^C$yf-pgb}|1ej}SEfSE3Y z43OzUx&4M!Kc)+bAK<8h*d}&9edw5I2TMr#VMBzWabPwyfL{~G!LfiJHk8EfrmZyc z!2x_jtfNL;-s*SnDuOD4?-f@Y1%GR6CDu+NmL=}Sm|(@r=Q=t0o@?dv(1+buf6dM_NO!yj zX&K}1RNA)Sxw}ngEa}uT=Hj1cb1^VuO-{gWoQTsGy8`Xa6wS6$alkBuB#l`RvT9Q@ z)yLND>Xb}PYVrfCIR-~UML0Kadjwl71OaT}DW zWryEAs1)W3Mxo;T@rvU7hzwE~l#Ds0tQCDf{z7l+{;0*Vc+4k?Jc{xYfhW?5!8d!y2ew8`mrcJk!1R+~aO zk8u(yr}yb1k8$Hi5dFQZZ8WRRC`tM^@3-n)l7q%^Qb@?g$s8f`2_vX+@Z#@Q0%RD zkL7%cp-R;kDvCL33u;g$S`Tsy5qYMjhBS-wfn_oGh70eeq43If-Wnx!e$Cw`rzn; zV*y$2-A*qz%?@O!247~YA+{j$S+#Q6UHz<@@7ZRC?^{h5T@tUpw}$I|h1Oj!Sw@;t z`oDiFdOo%6S$udi9JJ8)pN+>vvkCAkhMI0p-!OB)23Wq$b}okY%4o*^!p2(MiZ#cw zDf!#Dt1ebB+H=Boa`fZ@Fx^>Ffv-vTJY;0ZD?pw@!215`6yIMKTXY_w{d9xQ`ZJ=FNsO>Z4B1TC;f zoPr%(D+NM5z|k(}xbiD*<%#W_4@IZ(=fBdgB!cOO%)RaQt0a5B-QErvw+XXwyJ2g| z?c>I6B$;;mS0m)1tIP$gIe4}?3%m+l~Urv)StwmTz;a( zOhxSVkzp4Q@tx+3wZN#N@2z{mquyozluhbq$8}qeV}rDA>rv3sx~<1%n1^MRckQ*D zhd++fk2fj0Y4c(f2h&?@hEW{r-6OLz)meiPu5`%anxr=k@_!zeF!O+@Bx&~TtzM@V ziBdm|2X^ybru9YuSG2mRrqxYbORY9nw7O|)MXQ^N;e>YgvH09CWyIAyVJoSHhS}3Ypy*w9`>>l`nl0g+LQ)< zt+ja~44yW}iQw6!u}jHiQvf)jp^ra8%lmMY#_}=0#{gz|mEZFRX8ApTvXS3Y|K)$d z!V5FqO8^P;;Gb-f#5yv^sDHwF!`{Z0QDBg%%7MIzo7DWcYAn*dj;uMjcrUp$w8M>m%j#1+y5rvR|er zx(li%^Gnt<$y}yql36{j!MmyFQrWXOMbTZX_mX`3Aw83}vtC;*qTg7Rom%|-u%oab zn72p3d+9YElHM|OJ%@nx{Z)If!+23r$;6e?D~Ew7d{Ru)B1+oR7Z&XE-NAdkYdnI5 zp2Kjvy$<7RkG)xrVQ*VmE$enM`FgY?sc()14dreT@ zX_dJ}v*d7_pB@qCsV?BrhMI1+$U#_JH)1ne*Gl-lEgc6S7f@wUS!KuPkW1 z+7kuWifx_7=Ss$BcRi zM;=px_kPk^>v@EV=s66plfHl5ATL?l2blJU+f{m^@N#^~t62A_&Ih`l*hlw2uezN3hUy7;d-k zKc4owa>QO&Ml&dGuRX&jmiStFD^7wGu|^NmDbW#oU8c1oqCP5+R)hrLalPw3$G zw0k7(-qya4!yjzzBOU(3*5-}nTm~-)@LooKkJtWK$|0Y{8jGpCPp~TeyFGhlD6QGQ z?=1}j%-b2T-pYXWHVXDP_AlPY7OY6~b_EXJs=y&x5+I#eh*^5eGJfC&H&${+i#k1s zsI2lX+=e>W$MRMj2n^}_s-mwjEZ@Eu()(q#-Y?tcEzWzBSyCp@n&hZd4(0S+8(&x~ zLxP^k-eQyl9ez;sjc);`zQ+Q7&)g?2sGrK;Z0wQ|TTmq#QLNW>psuq4v@#CaTNZan5@+`h#$JxNB3#l`GEI& zt8~vJSm-$nx7+t0UwiD$G6jW4WQywSixc+w?%->7dmh0;&tbUTzQ5EW-?>trRC`}U z^TO`SV}7q@h36&uN6tVhQebC_ zzQ>h)kAuzklM&@x1gZ+&O-3xiE*ViAVe0(i9WOh0dLq5Dsn;~QLt(-==4-Ow#r0%J zA{cYQOP7Ja8jmn2J%`~#)$1@`@KiG4et=mauTG-yFA{1%VQFa3d)aMzVjtbtSiXTD zhexo`a~N*7*I|6^(K^d96dsXdYWD-pZhB&$?+(6Zx91To^c;rU?fc83$#<@3W_&iCMDv&C-%M7y75T@@ZRnkk63`FWURgL*4+w z1xH0!Y{A|equs>{R+Ik_>p@TKqdQNe!F#)FJc5OuL)~sI)m{ggyy?6h?VHAbl1gUg zmu-8Djc7jaB-PV@@Lf=)DNnY3?0ttD?J0*D2VJI#7pv{#EJ%E*h-k;NJ-$Jts<6Dn z>3X6v-QQu4M!|dO8b8k?7~?q%GqLPHp7yHAADH%M$0S`q;g7^;x|KjR&8e;@_R*aW zqJXd2?Rf+XJ%{0T`~G4#okwV&YjXKgSkeBIU4;YSEfKW{c&nkp_Y2WFYB}(bItlnt zLj^)wPfCQj4#1@@^XNj)@I63us9j4YvoQHZG^huN3Cef2PwOF3&mJHq1VUPfY(J-@d1U7EIZ$8x4&aoeWHbS2(3TmQlEU%dLc{}sDPQ=HD=}AqP4}# z(fYlYIzIIemA;ax1dN&@2oP;^&8LziFI>q=uNDgFxh;y^!?@MD)_kLn+E?3G&vIAW zce44qxeTL6ZBR>U8U6>9pBT`vz!#s3`*C~bY9U;~U)Q|)doflEfKNQ0alQD7M?%2o87dIcx+D<-PCX+RO=~a1ijII! z8X%9bvBCTDVjSSpVjz|PalNWETM5KcEfBMP0Mz<=>oaiI zs)arvI1_h1!Sb#};;cV5r1l1WO-#@(Ah|2+5kPEi+0nSj9H8ug?{7o9C9I}LhQxy7 zVp=SsKT*$gxO)usBH$AYCDN`qvyAj&8Pi1+{aTFPVi~7mw>=PyXu$_vRAm0Zq!&e# z<}m3yv8vAj9+aYV#hFCutP~Nzr$p1|N-O8Ek{T{2jHQ)xrImA(=--P4pg4z|k;T-x zX67Ta^g&tTU0X0jKRMv9e{J37Gg|_>!#v44P@Q4v6n~?sX?!Z}-JISWa1MVHcR1%< zgSXvJze43}=ECpWbyxXvm9_ic^Uy=|Cdi-1n_FK$asE`e3Gz2AL3eFl{faZW3G$wH zQ@@!dbR*tmc1%687V%vL<(;v%+H*_U zvpDBkSLrF6fcO}0 zWZ%^@j!)z$+q*(gtM!0H|A>9ZjQ*B!Ocq_drP9_sZ|-ZQ;vunQbOBRp&*6WB$>Ooh zuwq%bODkd7INxq|>(;=E>MN(dUwl-)WHKwOl>az3-3#d*S@#rwYtW6W6irVw zQ6VZmOt4!aPp0FNQ`1~j`ge@j1Wxq*N{s$8eZLcz`^$H;?OG}(g|7!BN!u2NU>rrCyC?Ifxb<%dJ)OM-Vwg^CA_qV1(Vz*ebTP)cX`#ybx0Z%5ox}{xZ z{G{jQtMZ6u{rg-`9)cj45P}b8r+;fa!ebE6Az)L_0O`Epb&y9JbRH2;m5ir87c(J7 z6AqQJqdh-vJ?M#jM33&^gSP448joP1=P=xEuY;)SI}gzwt+TWnBga(dYs_wXVxR90 zK3N=~8joP1=P=xEuY(-D_|AgzlJ$uKTHo20Npc)>?U}n%brDi zbR^H1eJj&eb81)Dll;S2+yq{IlmFFtgbef?hUcZ%VLV@}WbD0HjPKH|HWML!$Vk4M z^`IyA`R?Fzn-x~+o=33Ia~N*7?=PzQ&O@|E>y%?LQ{Ye;$*S`~W;Z>tk3^$8c(pbE ztMLdHdJe$UiN>#F<%2fYo>^?Qt8`b5N%yI7=qe>cmk~2|xWn0+Y*yk| z9de4p1Bd)x?p}p!yu_L3?HkX6;1aODzlI21vI8en$PSWxPbnqxdzMN(X*&!u=8OGZL;~I2BJZ5YM(>H=>xq zRdN2Qk>WUU=g3WQSk0P2afNt6Of=penIXM7lg%lA)c5vOW>VoNp*h$LCN%Qo4GXvm z3I!M9qP+M}ibfh{cu}Onglk<9$xv_EI*HWGp$F;Vw6{=h{gK`Bc4oc21NB^0Elz)g z@pCcghxUQLZ8#|#sLpkJkv%7#t1bf8f_=RCQrQ8grz+hS+U-#}kz0c?D6VYL_|L3F zD~^Xj3|_^Nlc=jWU{sgN@X^j#nYwG{=22Rqok|-uQqZKPRepR!l8*A&Zofp`#AE++ z@K_!rC3(P25)ShWmXbC~H%`6`lOt;a9{@plDT4AsDvOCAgU7RPNW-XPw+OpGk7cD; zi=r}&-Vzyh0r8d$)zXSZc#{>CbpSGW(IYV|-mAzCSaH6fu;U}qj^cb(r_k$7cZO&_ zWitdBZuvd*<67e-$#%=ZaUjDbVClzI*Y{o*aSJLi-YTA2FFhHy6qQ_4iVJbb?;)LQ zjhE>AmVIN1f=j^CuXcT_6}a>YKo{^xJ6M~HDP;>%?hvJH0nA>0xctmgO6^=2K^1#8 zc^`M0=Ql|IoVi*ie84|5g_O+uS8*uBlSjo3|HE=#jL@C9rNO{E5-60t5aESOS7fJm zJc>A8*X80F@BkDDa* zzG<|K3Vp5bc)r)3ynTrGR-$p)cYKX~->K%*tD0g!1+41n|9t<+=F|;E_ZI1UhBo~- z#sb;{OqF{J>2pb3?iZ6j?7v~P@YYll0r9Qm(i>t$PAt2CM7gDdFV~J_Co(AU;|8nV zcf4TL`mQ8cwf^G=OP4{(ZXzVhF~G;f_{Cu1MxnxaTy=!Ye-nBo%nyhh76I|^WOK&0 zKGAt^%z-7qe=yW!bN04AjcXDeAR4uF=)#o^9>GN~`Gh23(&yC|RubqqR76hYEeF}K zwSPNTifp~iyLJ^%dx@H~7>2`T@dJ32g`@R74IChJen=`i>?ba=WdXb*4-pOGB6NV) z=5#cYKZ}!hnFgn(+W)Wx9e0rx&G}Q|C(TfdtNvme@Z}~^4Ip>8Djo1=GP*W|**_D_ z+wCr@j#`bE)UxV6aW-KnWlVUP2dyljn&^DPb^H>wB`5k z2d3xuC^l^3@_XJbZF?dlg-*PmHP2wGmOo%JCQF`sSU$DMLj(5+9ctncWd}@RNtp*E zquU&#fr*uqu1*89XT*dp>Pn5MIOIx1*#Ps-(uX+mw9RZLWI7uVDo$S%=fj}5aXCJ} zfg{1!s#kI>cjv03*Rb6s!EoS=WjuXkzd~;e6qMISP@bKB_|Pjeu*ZWfN)6of+&a-I zkhg|;GHt^bb;pfI-gl**&-)^GJU402r`y7co-5IqzN^ugzQ_%eppWhFsnPdur#jz# z==?|Tzl^K=9(}(PM|81IP=7TINpNQD+Xcj!Ha}oUIjkm)?t@_X_r`GC5a=$5zAFtu zP3}rUQ0qT_2*Umi-LoJ7;tDC{-i<>hHJwW6{jM09Er2kbY_@Id6XGAmP|pIUU_H0| zn#`~#L+$gUltn3j*U9c_kR|LuOFxBN~__bVLI8 zDLY{NCr^w4Z!zyqHsVSe_*dw1Pbl1JUY`2|r3KfuC+Tkqr2yj12hy7%niR zwa`jaDg)UZpT7pB<6|4VLu2;$?6O6@Q7Lf zoV0ie6(D|B&F5njo^G)bLco`2;hOK$IzJHtUNk^R>ph7O@TvhqTHj2BfIl1{q%|G0 zVhQlhSq9AaX^}=^4B(4m-+4f?NT>iwq2L=@yWJdJ4S2Yr0wJv*BtpO+N7Mq~`k0GL zfTU?)N9+EPa31jYB5Dcnf{2<2d}~B40g}r>0iS=m_@S_p60Qj+pS_C91)W+F9t*68knFS;-WNrc^)}b%0 zPsT7W0$vkQ3xL-~)FL3U4(wM@q{zZ-ME z3&=jTapg|lMj|lA1s#!FTckOC6mN0fXU$H(v)RV zAn9Fv{zP_u9a&xKf7L&7gQ22%0DPx7zbpbCX(%NFzEhlY76EZVo@pr$76HivB`f{1 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

vErL0RIBJLaX15@hyyQ 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 literal 0 HcmV?d00001 diff --git a/cosmic_profiles/for_docs/dens_profs/dens_profs_algos.c b/cosmic_profiles/for_docs/dens_profs/dens_profs_algos.c new file mode 100644 index 0000000..3a3b148 --- /dev/null +++ b/cosmic_profiles/for_docs/dens_profs/dens_profs_algos.c @@ -0,0 +1,22420 @@ +/* Generated by Cython 0.29.21 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "extra_compile_args": [ + "-fopenmp" + ], + "extra_link_args": [ + "-fopenmp" + ], + "include_dirs": [ + "/home/tibor/.local/lib/python3.8/site-packages/numpy/core/include", + "." + ], + "name": "dens_profs.dens_profs_algos", + "sources": [ + "dens_profs/dens_profs_algos.pyx" + ] + }, + "module_name": "dens_profs.dens_profs_algos" +} +END: Cython Metadata */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.6+ or Python 3.3+. +#else +#define CYTHON_ABI "0_29_21" +#define CYTHON_HEX_VERSION 0x001D15F0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__dens_profs__dens_profs_algos +#define __PYX_HAVE_API__dens_profs__dens_profs_algos +/* Early includes */ +#include "pythread.h" +#include +#include +#include +#include "pystate.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +static const char *__pyx_f[] = { + "dens_profs/dens_profs_algos.pyx", + "stringsource", +}; +/* MemviewSliceStruct.proto */ +struct __pyx_memoryview_obj; +typedef struct { + struct __pyx_memoryview_obj *memview; + char *data; + Py_ssize_t shape[8]; + Py_ssize_t strides[8]; + Py_ssize_t suboffsets[8]; +} __Pyx_memviewslice; +#define __Pyx_MemoryView_Len(m) (m.shape[0]) + +/* Atomics.proto */ +#include +#ifndef CYTHON_ATOMICS + #define CYTHON_ATOMICS 1 +#endif +#define __pyx_atomic_int_type int +#if CYTHON_ATOMICS && __GNUC__ >= 4 && (__GNUC_MINOR__ > 1 ||\ + (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL >= 2)) &&\ + !defined(__i386__) + #define __pyx_atomic_incr_aligned(value, lock) __sync_fetch_and_add(value, 1) + #define __pyx_atomic_decr_aligned(value, lock) __sync_fetch_and_sub(value, 1) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using GNU atomics" + #endif +#elif CYTHON_ATOMICS && defined(_MSC_VER) && 0 + #include + #undef __pyx_atomic_int_type + #define __pyx_atomic_int_type LONG + #define __pyx_atomic_incr_aligned(value, lock) InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #pragma message ("Using MSVC atomics") + #endif +#elif CYTHON_ATOMICS && (defined(__ICC) || defined(__INTEL_COMPILER)) && 0 + #define __pyx_atomic_incr_aligned(value, lock) _InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) _InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using Intel atomics" + #endif +#else + #undef CYTHON_ATOMICS + #define CYTHON_ATOMICS 0 + #ifdef __PYX_DEBUG_ATOMICS + #warning "Not using atomics" + #endif +#endif +typedef volatile __pyx_atomic_int_type __pyx_atomic_int; +#if CYTHON_ATOMICS + #define __pyx_add_acquisition_count(memview)\ + __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) +#else + #define __pyx_add_acquisition_count(memview)\ + __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) +#endif + +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* NoFastGil.proto */ +#define __Pyx_PyGILState_Ensure PyGILState_Ensure +#define __Pyx_PyGILState_Release PyGILState_Release +#define __Pyx_FastGIL_Remember() +#define __Pyx_FastGIL_Forget() +#define __Pyx_FastGilFuncInit() + +/* BufferFormatStructs.proto */ +#define IS_UNSIGNED(type) (((type) -1) > 0) +struct __Pyx_StructField_; +#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) +typedef struct { + const char* name; + struct __Pyx_StructField_* fields; + size_t size; + size_t arraysize[8]; + int ndim; + char typegroup; + char is_unsigned; + int flags; +} __Pyx_TypeInfo; +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + size_t new_count, enc_count; + size_t struct_alignment; + int is_complex; + char enc_type; + char new_packmode; + char enc_packmode; + char is_valid_array; +} __Pyx_BufFmt_Context; + + +/*--- Type declarations ---*/ +struct __pyx_array_obj; +struct __pyx_MemviewEnum_obj; +struct __pyx_memoryview_obj; +struct __pyx_memoryviewslice_obj; + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ +struct __pyx_array_obj { + PyObject_HEAD + struct __pyx_vtabstruct_array *__pyx_vtab; + char *data; + Py_ssize_t len; + char *format; + int ndim; + Py_ssize_t *_shape; + Py_ssize_t *_strides; + Py_ssize_t itemsize; + PyObject *mode; + PyObject *_format; + void (*callback_free_data)(void *); + int free_data; + int dtype_is_object; +}; + + +/* "View.MemoryView":279 + * + * @cname('__pyx_MemviewEnum') + * cdef class Enum(object): # <<<<<<<<<<<<<< + * cdef object name + * def __init__(self, name): + */ +struct __pyx_MemviewEnum_obj { + PyObject_HEAD + PyObject *name; +}; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ +struct __pyx_memoryview_obj { + PyObject_HEAD + struct __pyx_vtabstruct_memoryview *__pyx_vtab; + PyObject *obj; + PyObject *_size; + PyObject *_array_interface; + PyThread_type_lock lock; + __pyx_atomic_int acquisition_count[2]; + __pyx_atomic_int *acquisition_count_aligned_p; + Py_buffer view; + int flags; + int dtype_is_object; + __Pyx_TypeInfo *typeinfo; +}; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ +struct __pyx_memoryviewslice_obj { + struct __pyx_memoryview_obj __pyx_base; + __Pyx_memviewslice from_slice; + PyObject *from_object; + PyObject *(*to_object_func)(char *); + int (*to_dtype_func)(char *, PyObject *); +}; + + + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ + +struct __pyx_vtabstruct_array { + PyObject *(*get_memview)(struct __pyx_array_obj *); +}; +static struct __pyx_vtabstruct_array *__pyx_vtabptr_array; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ + +struct __pyx_vtabstruct_memoryview { + char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *); + PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *); +}; +static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ + +struct __pyx_vtabstruct__memoryviewslice { + struct __pyx_vtabstruct_memoryview __pyx_base; +}; +static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* MemviewSliceInit.proto */ +#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d +#define __Pyx_MEMVIEW_DIRECT 1 +#define __Pyx_MEMVIEW_PTR 2 +#define __Pyx_MEMVIEW_FULL 4 +#define __Pyx_MEMVIEW_CONTIG 8 +#define __Pyx_MEMVIEW_STRIDED 16 +#define __Pyx_MEMVIEW_FOLLOW 32 +#define __Pyx_IS_C_CONTIG 1 +#define __Pyx_IS_F_CONTIG 2 +static int __Pyx_init_memviewslice( + struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference); +static CYTHON_INLINE int __pyx_add_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +#define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p) +#define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview)) +#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) +#define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__) +static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int); + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* StrEquals.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals +#else +#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +#endif + +/* None.proto */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); + +/* UnaryNegOverflows.proto */ +#define UNARY_NEG_WOULD_OVERFLOW(x)\ + (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) + +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/ +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* 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_string.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, 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)); + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseNoneIterError.proto */ +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 +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) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +static CYTHON_UNUSED 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 +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) +#endif + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* ListExtend.proto */ +static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { +#if CYTHON_COMPILING_IN_CPYTHON + PyObject* none = _PyList_Extend((PyListObject*)L, v); + if (unlikely(!none)) + return -1; + Py_DECREF(none); + return 0; +#else + return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); +#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); + PyList_SET_ITEM(list, len, x); + __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 + +/* None.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); + +/* None.proto */ +static CYTHON_INLINE long __Pyx_div_long(long, long); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* SetVTable.proto */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable); + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* SetupReduce.proto */ +static int __Pyx_setup_reduce(PyObject* type_obj); + +/* FetchCommonType.proto */ +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED 1 +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { + PyCFunctionObject func; +#if PY_VERSION_HEX < 0x030500A0 + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; + PyObject *func_classobj; + void *defaults; + int defaults_pyobjects; + size_t defaults_size; // used by FusedFunction for copying defaults + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; +} __pyx_CyFunctionObject; +static PyTypeObject *__pyx_CyFunctionType = 0; +#define __Pyx_CyFunction_Check(obj) (__Pyx_TypeCheck(obj, __pyx_CyFunctionType)) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *self, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(void); + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +#if PY_MAJOR_VERSION < 3 + static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); + static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else + #define __Pyx_GetBuffer PyObject_GetBuffer + #define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + + +/* BufferStructDeclare.proto */ +typedef struct { + Py_ssize_t shape, strides, suboffsets; +} __Pyx_Buf_DimInfo; +typedef struct { + size_t refcount; + Py_buffer pybuffer; +} __Pyx_Buffer; +typedef struct { + __Pyx_Buffer *rcbuffer; + char *data; + __Pyx_Buf_DimInfo diminfo[8]; +} __Pyx_LocalBuf_ND; + +/* MemviewSliceIsContig.proto */ +static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim); + +/* OverlappingSlices.proto */ +static int __pyx_slices_overlap(__Pyx_memviewslice *slice1, + __Pyx_memviewslice *slice2, + int ndim, size_t itemsize); + +/* Capsule.proto */ +static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig); + +/* IsLittleEndian.proto */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); + +/* BufferFormatCheck.proto */ +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts); +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type); + +/* TypeInfoCompare.proto */ +static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b); + +/* MemviewSliceValidateAndInit.proto */ +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); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_float(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_float(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_int(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(PyObject *, int writable_flag); + +/* MemviewSliceCopyTemplate.proto */ +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); + +/* 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); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *); + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/ +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/ +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ + +/* Module declarations from 'cython.view' */ + +/* Module declarations from 'cython' */ + +/* Module declarations from 'dens_profs.dens_profs_algos' */ +static PyTypeObject *__pyx_array_type = 0; +static PyTypeObject *__pyx_MemviewEnum_type = 0; +static PyTypeObject *__pyx_memoryview_type = 0; +static PyTypeObject *__pyx_memoryviewslice_type = 0; +static PyObject *generic = 0; +static PyObject *strided = 0; +static PyObject *indirect = 0; +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 struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/ +static void *__pyx_align_pointer(void *, size_t); /*proto*/ +static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/ +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/ +static PyObject *_unellipsify(PyObject *, int); /*proto*/ +static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/ +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/ +static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/ +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/ +static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/ +static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/ +static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/ +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/ +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/ +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/ +static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/ +static int __pyx_memoryview_err(PyObject *, char *); /*proto*/ +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/ +static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/ +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_float = { "float", NULL, sizeof(float), { 0 }, 0, 'R', 0, 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 }; +#define __Pyx_MODULE_NAME "dens_profs.dens_profs_algos" +extern int __pyx_module_is_main_dens_profs__dens_profs_algos; +int __pyx_module_is_main_dens_profs__dens_profs_algos = 0; + +/* Implementation of 'dens_profs.dens_profs_algos' */ +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_MemoryError; +static PyObject *__pyx_builtin_enumerate; +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_Ellipsis; +static PyObject *__pyx_builtin_id; +static PyObject *__pyx_builtin_IndexError; +static const char __pyx_k_O[] = "O"; +static const char __pyx_k_a[] = "a"; +static const char __pyx_k_b[] = "b"; +static const char __pyx_k_c[] = "c"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_new[] = "__new__"; +static const char __pyx_k_obj[] = "obj"; +static const char __pyx_k_xyz[] = "xyz"; +static const char __pyx_k_base[] = "base"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mode[] = "mode"; +static const char __pyx_k_name[] = "name"; +static const char __pyx_k_ndim[] = "ndim"; +static const char __pyx_k_pack[] = "pack"; +static const char __pyx_k_size[] = "size"; +static const char __pyx_k_step[] = "step"; +static const char __pyx_k_stop[] = "stop"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_ASCII[] = "ASCII"; +static const char __pyx_k_L_BOX[] = "L_BOX"; +static const char __pyx_k_class[] = "__class__"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_flags[] = "flags"; +static const char __pyx_k_inter[] = "inter"; +static const char __pyx_k_major[] = "major"; +static const char __pyx_k_minor[] = "minor"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_r200s[] = "r200s"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_shape[] = "shape"; +static const char __pyx_k_start[] = "start"; +static const char __pyx_k_CENTER[] = "CENTER"; +static const char __pyx_k_encode[] = "encode"; +static const char __pyx_k_format[] = "format"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_masses[] = "masses"; +static const char __pyx_k_name_2[] = "__name__"; +static const char __pyx_k_pickle[] = "pickle"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_struct[] = "struct"; +static const char __pyx_k_unpack[] = "unpack"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_fortran[] = "fortran"; +static const char __pyx_k_idx_cat[] = "idx_cat"; +static const char __pyx_k_memview[] = "memview"; +static const char __pyx_k_Ellipsis[] = "Ellipsis"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_itemsize[] = "itemsize"; +static const char __pyx_k_obj_keep[] = "obj_keep"; +static const char __pyx_k_pyx_type[] = "__pyx_type"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_ROverR200[] = "ROverR200"; +static const char __pyx_k_TypeError[] = "TypeError"; +static const char __pyx_k_enumerate[] = "enumerate"; +static const char __pyx_k_pyx_state[] = "__pyx_state"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_IndexError[] = "IndexError"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_pyx_result[] = "__pyx_result"; +static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; +static const char __pyx_k_MemoryError[] = "MemoryError"; +static const char __pyx_k_PickleError[] = "PickleError"; +static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; +static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_MIN_NUMBER_PTCS[] = "MIN_NUMBER_PTCS"; +static const char __pyx_k_View_MemoryView[] = "View.MemoryView"; +static const char __pyx_k_allocate_buffer[] = "allocate_buffer"; +static const char __pyx_k_dtype_is_object[] = "dtype_is_object"; +static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_calcMassesCenters[] = "calcMassesCenters"; +static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_strided_and_direct[] = ""; +static const char __pyx_k_strided_and_indirect[] = ""; +static const char __pyx_k_contiguous_and_direct[] = ""; +static const char __pyx_k_MemoryView_of_r_object[] = ""; +static const char __pyx_k_MemoryView_of_r_at_0x_x[] = ""; +static const char __pyx_k_contiguous_and_indirect[] = ""; +static const char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'"; +static const char __pyx_k_calcDensProfsKernelBased[] = "calcDensProfsKernelBased"; +static const char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d."; +static const char __pyx_k_dens_profs_dens_profs_algos[] = "dens_profs.dens_profs_algos"; +static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array"; +static const char __pyx_k_calcDensProfsEllDirectBinning[] = "calcDensProfsEllDirectBinning"; +static const char __pyx_k_calcDensProfsSphDirectBinning[] = "calcDensProfsSphDirectBinning"; +static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data."; +static const char __pyx_k_strided_and_direct_or_indirect[] = ""; +static const char __pyx_k_dens_profs_dens_profs_algos_pyx[] = "dens_profs/dens_profs_algos.pyx"; +static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides"; +static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory."; +static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview"; +static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview"; +static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array"; +static const char __pyx_k_Incompatible_checksums_s_vs_0xb0[] = "Incompatible checksums (%s vs 0xb068931 = (name))"; +static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported"; +static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got %s"; +static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis %d)"; +static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object"; +static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension %d (got %d and %d)"; +static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__"; +static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides."; +static PyObject *__pyx_n_s_ASCII; +static PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri; +static PyObject *__pyx_n_s_CENTER; +static PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is; +static PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor; +static PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi; +static PyObject *__pyx_kp_s_Cannot_index_with_type_s; +static PyObject *__pyx_n_s_Ellipsis; +static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xb0; +static PyObject *__pyx_n_s_IndexError; +static PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte; +static PyObject *__pyx_kp_s_Invalid_mode_expected_c_or_fortr; +static PyObject *__pyx_kp_s_Invalid_shape_in_axis_d_d; +static PyObject *__pyx_n_s_L_BOX; +static PyObject *__pyx_n_s_MIN_NUMBER_PTCS; +static PyObject *__pyx_n_s_MemoryError; +static PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x; +static PyObject *__pyx_kp_s_MemoryView_of_r_object; +static PyObject *__pyx_n_b_O; +static PyObject *__pyx_kp_s_Out_of_bounds_on_buffer_access_a; +static PyObject *__pyx_n_s_PickleError; +static PyObject *__pyx_n_s_ROverR200; +static PyObject *__pyx_n_s_TypeError; +static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object; +static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_n_s_View_MemoryView; +static PyObject *__pyx_n_s_a; +static PyObject *__pyx_n_s_allocate_buffer; +static PyObject *__pyx_n_s_b; +static PyObject *__pyx_n_s_base; +static PyObject *__pyx_n_s_c; +static PyObject *__pyx_n_u_c; +static PyObject *__pyx_n_s_calcDensProfsEllDirectBinning; +static PyObject *__pyx_n_s_calcDensProfsKernelBased; +static PyObject *__pyx_n_s_calcDensProfsSphDirectBinning; +static PyObject *__pyx_n_s_calcMassesCenters; +static PyObject *__pyx_n_s_class; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_kp_s_contiguous_and_direct; +static PyObject *__pyx_kp_s_contiguous_and_indirect; +static PyObject *__pyx_n_s_dens_profs_dens_profs_algos; +static PyObject *__pyx_kp_s_dens_profs_dens_profs_algos_pyx; +static PyObject *__pyx_n_s_dict; +static PyObject *__pyx_n_s_dtype_is_object; +static PyObject *__pyx_n_s_encode; +static PyObject *__pyx_n_s_enumerate; +static PyObject *__pyx_n_s_error; +static PyObject *__pyx_n_s_flags; +static PyObject *__pyx_n_s_format; +static PyObject *__pyx_n_s_fortran; +static PyObject *__pyx_n_u_fortran; +static PyObject *__pyx_n_s_getstate; +static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi; +static PyObject *__pyx_n_s_id; +static PyObject *__pyx_n_s_idx_cat; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_inter; +static PyObject *__pyx_n_s_itemsize; +static PyObject *__pyx_kp_s_itemsize_0_for_cython_array; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_major; +static PyObject *__pyx_n_s_masses; +static PyObject *__pyx_n_s_memview; +static PyObject *__pyx_n_s_minor; +static PyObject *__pyx_n_s_mode; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_name_2; +static PyObject *__pyx_n_s_ndim; +static PyObject *__pyx_n_s_new; +static PyObject *__pyx_kp_s_no_default___reduce___due_to_non; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_numpy; +static PyObject *__pyx_n_s_obj; +static PyObject *__pyx_n_s_obj_keep; +static PyObject *__pyx_n_s_pack; +static PyObject *__pyx_n_s_pickle; +static PyObject *__pyx_n_s_pyx_PickleError; +static PyObject *__pyx_n_s_pyx_checksum; +static PyObject *__pyx_n_s_pyx_getbuffer; +static PyObject *__pyx_n_s_pyx_result; +static PyObject *__pyx_n_s_pyx_state; +static PyObject *__pyx_n_s_pyx_type; +static PyObject *__pyx_n_s_pyx_unpickle_Enum; +static PyObject *__pyx_n_s_pyx_vtable; +static PyObject *__pyx_n_s_r200s; +static PyObject *__pyx_n_s_range; +static PyObject *__pyx_n_s_reduce; +static PyObject *__pyx_n_s_reduce_cython; +static PyObject *__pyx_n_s_reduce_ex; +static PyObject *__pyx_n_s_setstate; +static PyObject *__pyx_n_s_setstate_cython; +static PyObject *__pyx_n_s_shape; +static PyObject *__pyx_n_s_size; +static PyObject *__pyx_n_s_start; +static PyObject *__pyx_n_s_step; +static PyObject *__pyx_n_s_stop; +static PyObject *__pyx_kp_s_strided_and_direct; +static PyObject *__pyx_kp_s_strided_and_direct_or_indirect; +static PyObject *__pyx_kp_s_strided_and_indirect; +static PyObject *__pyx_kp_s_stringsource; +static PyObject *__pyx_n_s_struct; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_kp_s_unable_to_allocate_array_data; +static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str; +static PyObject *__pyx_n_s_unpack; +static PyObject *__pyx_n_s_update; +static PyObject *__pyx_n_s_xyz; +static PyObject *__pyx_pf_10dens_profs_16dens_profs_algos_calcMassesCenters(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED PyObject *__pyx_v_CENTER); /* proto */ +static PyObject *__pyx_pf_10dens_profs_16dens_profs_algos_2calcDensProfsSphDirectBinning(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_obj_keep, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED PyObject *__pyx_v_CENTER); /* proto */ +static PyObject *__pyx_pf_10dens_profs_16dens_profs_algos_4calcDensProfsEllDirectBinning(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_obj_keep, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED PyObject *__pyx_v_CENTER); /* proto */ +static PyObject *__pyx_pf_10dens_profs_16dens_profs_algos_6calcDensProfsKernelBased(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_obj_keep, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED PyObject *__pyx_v_CENTER); /* proto */ +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 */ +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */ +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */ +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +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 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*/ +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_1; +static PyObject *__pyx_int_184977713; +static PyObject *__pyx_int_neg_1; +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__4; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__6; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_tuple__8; +static PyObject *__pyx_tuple__9; +static PyObject *__pyx_slice__15; +static PyObject *__pyx_tuple__10; +static PyObject *__pyx_tuple__11; +static PyObject *__pyx_tuple__12; +static PyObject *__pyx_tuple__13; +static PyObject *__pyx_tuple__14; +static PyObject *__pyx_tuple__16; +static PyObject *__pyx_tuple__17; +static PyObject *__pyx_tuple__18; +static PyObject *__pyx_tuple__19; +static PyObject *__pyx_tuple__21; +static PyObject *__pyx_tuple__23; +static PyObject *__pyx_tuple__25; +static PyObject *__pyx_tuple__27; +static PyObject *__pyx_tuple__28; +static PyObject *__pyx_tuple__29; +static PyObject *__pyx_tuple__30; +static PyObject *__pyx_tuple__31; +static PyObject *__pyx_tuple__32; +static PyObject *__pyx_codeobj__20; +static PyObject *__pyx_codeobj__22; +static PyObject *__pyx_codeobj__24; +static PyObject *__pyx_codeobj__26; +static PyObject *__pyx_codeobj__33; +/* Late includes */ + +/* "dens_profs/dens_profs_algos.pyx":10 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMassesCenters(float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculate total mass and centers of objects + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_10dens_profs_16dens_profs_algos_1calcMassesCenters(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_10dens_profs_16dens_profs_algos_calcMassesCenters[] = "calcMassesCenters(float[:, :] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, unicode CENTER)\n Calculate total mass and centers of objects\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param idx_cat: list of indices defining the objects\n :type idx_cat: list of length N1, each consisting of a list of int indices\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param L_BOX: box size\n :type L_BOX: float\n :param CENTER: density profiles will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str\n :return centers, m: centers and masses\n :rtype: (N,3) and (N,) floats"; +static PyMethodDef __pyx_mdef_10dens_profs_16dens_profs_algos_1calcMassesCenters = {"calcMassesCenters", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10dens_profs_16dens_profs_algos_1calcMassesCenters, METH_VARARGS|METH_KEYWORDS, __pyx_doc_10dens_profs_16dens_profs_algos_calcMassesCenters}; +static PyObject *__pyx_pw_10dens_profs_16dens_profs_algos_1calcMassesCenters(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_L_BOX; + CYTHON_UNUSED PyObject *__pyx_v_CENTER = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMassesCenters (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_L_BOX,&__pyx_n_s_CENTER,0}; + PyObject* values[6] = {0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMassesCenters", 1, 6, 6, 1); __PYX_ERR(0, 10, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMassesCenters", 1, 6, 6, 2); __PYX_ERR(0, 10, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMassesCenters", 1, 6, 6, 3); __PYX_ERR(0, 10, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMassesCenters", 1, 6, 6, 4); __PYX_ERR(0, 10, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMassesCenters", 1, 6, 6, 5); __PYX_ERR(0, 10, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcMassesCenters") < 0)) __PYX_ERR(0, 10, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 10, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 10, __pyx_L3_error) + __pyx_v_idx_cat = values[2]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10, __pyx_L3_error) + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 10, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[5]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcMassesCenters", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 10, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dens_profs.dens_profs_algos.calcMassesCenters", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 10, __pyx_L1_error) + __pyx_r = __pyx_pf_10dens_profs_16dens_profs_algos_calcMassesCenters(__pyx_self, __pyx_v_xyz, __pyx_v_masses, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_L_BOX, __pyx_v_CENTER); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_10dens_profs_16dens_profs_algos_calcMassesCenters(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED PyObject *__pyx_v_CENTER) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMassesCenters", 0); + + /* "dens_profs/dens_profs_algos.pyx":28 + * :return centers, m: centers and masses + * :rtype: (N,3) and (N,) floats""" + * return # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "dens_profs/dens_profs_algos.pyx":10 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMassesCenters(float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculate total mass and centers of objects + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dens_profs/dens_profs_algos.pyx":32 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsSphDirectBinning(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates spherical shell-based density profiles for objects defined by indices found in `idx_cat` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_10dens_profs_16dens_profs_algos_3calcDensProfsSphDirectBinning(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_10dens_profs_16dens_profs_algos_2calcDensProfsSphDirectBinning[] = "calcDensProfsSphDirectBinning(float[:, :] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, unicode CENTER)\n Calculates spherical shell-based density profiles for objects defined by indices found in `idx_cat` \n \n Note: To calculate enclosed mass profiles, envoke ``CythonHelpers.calcMenclsBruteForce()`` instead of ``CythonHelpers.calcDensProfBruteForce()``\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param obj_keep: which objects among the N1 different ones to consider. 1: keep, 0: ignore\n This can be used to select objects within a certain mass range, for instance. Having\n a 1 where `idx_cat` has an empty list entry is not permitted.\n :type obj_keep: (N1,) ints\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param r200s: R200 values of the objects\n :type r200s: (N1,) floats\n :param ROverR200: radii at which the density profiles should be calculated,\n normalized by R200\n :type ROverR200: (r_res,) float array\n :param idx_cat: list of indices defining the objects\n :type idx_cat: list of length N1, each consisting of a list of int indices\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for density profile calculation\n :type MIN_NUMBER_PTCS: int\n :param L_BOX: box size\n :type L_BOX: float\n :param CENTER: density profiles will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str\n :return: density profiles defined at ROverR200\n :rtype: (nb_keep, r_res) float array"; +static PyMethodDef __pyx_mdef_10dens_profs_16dens_profs_algos_3calcDensProfsSphDirectBinning = {"calcDensProfsSphDirectBinning", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10dens_profs_16dens_profs_algos_3calcDensProfsSphDirectBinning, METH_VARARGS|METH_KEYWORDS, __pyx_doc_10dens_profs_16dens_profs_algos_2calcDensProfsSphDirectBinning}; +static PyObject *__pyx_pw_10dens_profs_16dens_profs_algos_3calcDensProfsSphDirectBinning(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_obj_keep = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_L_BOX; + CYTHON_UNUSED PyObject *__pyx_v_CENTER = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcDensProfsSphDirectBinning (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_obj_keep,&__pyx_n_s_masses,&__pyx_n_s_r200s,&__pyx_n_s_ROverR200,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_L_BOX,&__pyx_n_s_CENTER,0}; + PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_keep)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsSphDirectBinning", 1, 9, 9, 1); __PYX_ERR(0, 32, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsSphDirectBinning", 1, 9, 9, 2); __PYX_ERR(0, 32, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r200s)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsSphDirectBinning", 1, 9, 9, 3); __PYX_ERR(0, 32, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsSphDirectBinning", 1, 9, 9, 4); __PYX_ERR(0, 32, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsSphDirectBinning", 1, 9, 9, 5); __PYX_ERR(0, 32, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsSphDirectBinning", 1, 9, 9, 6); __PYX_ERR(0, 32, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsSphDirectBinning", 1, 9, 9, 7); __PYX_ERR(0, 32, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsSphDirectBinning", 1, 9, 9, 8); __PYX_ERR(0, 32, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcDensProfsSphDirectBinning") < 0)) __PYX_ERR(0, 32, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 9) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_v_obj_keep = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_obj_keep.memview)) __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_v_r200s = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r200s.memview)) __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_v_ROverR200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ROverR200.memview)) __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_v_idx_cat = values[5]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[7]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[8]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcDensProfsSphDirectBinning", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dens_profs.dens_profs_algos.calcDensProfsSphDirectBinning", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 32, __pyx_L1_error) + __pyx_r = __pyx_pf_10dens_profs_16dens_profs_algos_2calcDensProfsSphDirectBinning(__pyx_self, __pyx_v_xyz, __pyx_v_obj_keep, __pyx_v_masses, __pyx_v_r200s, __pyx_v_ROverR200, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_L_BOX, __pyx_v_CENTER); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_10dens_profs_16dens_profs_algos_2calcDensProfsSphDirectBinning(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_obj_keep, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED PyObject *__pyx_v_CENTER) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcDensProfsSphDirectBinning", 0); + + /* "dens_profs/dens_profs_algos.pyx":61 + * :return: density profiles defined at ROverR200 + * :rtype: (nb_keep, r_res) float array""" + * return # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "dens_profs/dens_profs_algos.pyx":32 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsSphDirectBinning(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates spherical shell-based density profiles for objects defined by indices found in `idx_cat` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_obj_keep, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r200s, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_ROverR200, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dens_profs/dens_profs_algos.pyx":65 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsEllDirectBinning(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, float[:,:] a, float[:,:] b, float[:,:] c, float[:,:,:] major, float[:,:,:] inter, float[:,:,:] minor, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates ellipsoidal shell-based density profiles for objects defined by indices found in `idx_cat` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_10dens_profs_16dens_profs_algos_5calcDensProfsEllDirectBinning(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_10dens_profs_16dens_profs_algos_4calcDensProfsEllDirectBinning[] = "calcDensProfsEllDirectBinning(float[:, :] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, float[:, :] a, float[:, :] b, float[:, :] c, float[:, :, :] major, float[:, :, :] inter, float[:, :, :] minor, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, unicode CENTER)\n Calculates ellipsoidal shell-based density profiles for objects defined by indices found in `idx_cat` \n \n Note: To calculate enclosed mass profiles, envoke ``CythonHelpers.calcMenclsBruteForceEll()`` instead of ``CythonHelpers.calcDensProfBruteForceEll()``\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param obj_keep: which objects among the N1 different ones to consider. 1: keep, 0: ignore\n This can be used to select objects within a certain mass range, for instance. Having\n a 1 where `idx_cat` has an empty list entry is not permitted.\n :type obj_keep: (N1,) ints\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param r200s: R200 values of the objects\n :type r200s: (N1,) floats\n :param ROverR200: radii at which the density profiles should be calculated,\n normalized by R200\n :type ROverR200: (r_res,) float array\n :param idx_cat: list of indices defining the objects\n :type idx_cat: list of length N1, each consisting of a list of int indices\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for density profile calculation\n :type MIN_NUMBER_PTCS: int\n :param L_BOX: box size\n :type L_BOX: float\n :param CENTER: density profiles will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str\n :param a: major axis eigenvalues\n :type a: (N1,D_BINS+1,) floats\n :param b: intermediate axis eigenvalues\n :type b: (N1,D_BINS+1,) floats\n :param c: minor axis eigenvalues\n :type c: (N1,D_B""INS+1,) floats\n :param major: major axis eigenvectors\n :type major: (N1,D_BINS+1,3) floats\n :param inter: inter axis eigenvectors\n :type inter: (N1,D_BINS+1,3) floats\n :param minor: minor axis eigenvectors\n :type minor: (N1,D_BINS+1,3) floats\n :return: density profiles defined at ROverR200\n :rtype: (nb_keep, r_res) float array"; +static PyMethodDef __pyx_mdef_10dens_profs_16dens_profs_algos_5calcDensProfsEllDirectBinning = {"calcDensProfsEllDirectBinning", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10dens_profs_16dens_profs_algos_5calcDensProfsEllDirectBinning, METH_VARARGS|METH_KEYWORDS, __pyx_doc_10dens_profs_16dens_profs_algos_4calcDensProfsEllDirectBinning}; +static PyObject *__pyx_pw_10dens_profs_16dens_profs_algos_5calcDensProfsEllDirectBinning(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_obj_keep = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_L_BOX; + CYTHON_UNUSED PyObject *__pyx_v_CENTER = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcDensProfsEllDirectBinning (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_obj_keep,&__pyx_n_s_masses,&__pyx_n_s_r200s,&__pyx_n_s_ROverR200,&__pyx_n_s_a,&__pyx_n_s_b,&__pyx_n_s_c,&__pyx_n_s_major,&__pyx_n_s_inter,&__pyx_n_s_minor,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_L_BOX,&__pyx_n_s_CENTER,0}; + PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_keep)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 1); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 2); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r200s)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 3); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 4); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_a)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 5); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 6); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 7); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_major)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 8); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inter)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 9); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minor)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 10); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 11); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 12); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 13); __PYX_ERR(0, 65, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, 14); __PYX_ERR(0, 65, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcDensProfsEllDirectBinning") < 0)) __PYX_ERR(0, 65, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 15) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_obj_keep = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_obj_keep.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_r200s = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r200s.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_ROverR200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ROverR200.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_a = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_a.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_b = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_b.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_c = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_c.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_major = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_major.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_inter = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_inter.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_minor = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_minor.memview)) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_idx_cat = values[11]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[12]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[13]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[14]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcDensProfsEllDirectBinning", 1, 15, 15, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 65, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dens_profs.dens_profs_algos.calcDensProfsEllDirectBinning", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 65, __pyx_L1_error) + __pyx_r = __pyx_pf_10dens_profs_16dens_profs_algos_4calcDensProfsEllDirectBinning(__pyx_self, __pyx_v_xyz, __pyx_v_obj_keep, __pyx_v_masses, __pyx_v_r200s, __pyx_v_ROverR200, __pyx_v_a, __pyx_v_b, __pyx_v_c, __pyx_v_major, __pyx_v_inter, __pyx_v_minor, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_L_BOX, __pyx_v_CENTER); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_10dens_profs_16dens_profs_algos_4calcDensProfsEllDirectBinning(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_obj_keep, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_a, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_b, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_c, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_major, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_inter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_minor, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED PyObject *__pyx_v_CENTER) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcDensProfsEllDirectBinning", 0); + + /* "dens_profs/dens_profs_algos.pyx":106 + * :return: density profiles defined at ROverR200 + * :rtype: (nb_keep, r_res) float array""" + * return # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "dens_profs/dens_profs_algos.pyx":65 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsEllDirectBinning(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, float[:,:] a, float[:,:] b, float[:,:] c, float[:,:,:] major, float[:,:,:] inter, float[:,:,:] minor, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates ellipsoidal shell-based density profiles for objects defined by indices found in `idx_cat` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_obj_keep, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r200s, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_ROverR200, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_a, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_b, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_c, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_major, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_inter, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_minor, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dens_profs/dens_profs_algos.pyx":110 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsKernelBased(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates kernel-based density profiles for objects defined by indices found in `idx_cat` + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_10dens_profs_16dens_profs_algos_7calcDensProfsKernelBased(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_10dens_profs_16dens_profs_algos_6calcDensProfsKernelBased[] = "calcDensProfsKernelBased(float[:, :] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, unicode CENTER)\n Calculates kernel-based density profiles for objects defined by indices found in `idx_cat`\n \n Note: For background on this kernel-based method consult Reed et al. 2003, https://arxiv.org/abs/astro-ph/0312544.\n \n :param xyz: positions of all simulation particles\n :type xyz: (N2,3) floats, N2 >> N1\n :param obj_keep: which objects among the N1 different ones to consider. 1: keep, 0: ignore\n This can be used to select objects within a certain mass range, for instance. Having\n a 1 where `idx_cat` has an empty list entry is not permitted.\n :type obj_keep: (N1,) ints\n :param masses: masses of all simulation particles\n :type masses: (N2,) floats\n :param r200s: R200 values of the objects\n :type r200s: (N1,) floats\n :param ROverR200: radii at which the density profiles should be calculated,\n normalized by R200\n :type ROverR200: (r_res,) float array\n :param idx_cat: list of indices defining the objects\n :type idx_cat: list of length N1, each consisting of a list of int indices\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for density profile calculation\n :type MIN_NUMBER_PTCS: int\n :param L_BOX: box size\n :type L_BOX: float\n :param CENTER: density profiles will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str\n :return: density profiles defined at ROverR200\n :rtype: (nb_keep, r_res) float array"; +static PyMethodDef __pyx_mdef_10dens_profs_16dens_profs_algos_7calcDensProfsKernelBased = {"calcDensProfsKernelBased", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10dens_profs_16dens_profs_algos_7calcDensProfsKernelBased, METH_VARARGS|METH_KEYWORDS, __pyx_doc_10dens_profs_16dens_profs_algos_6calcDensProfsKernelBased}; +static PyObject *__pyx_pw_10dens_profs_16dens_profs_algos_7calcDensProfsKernelBased(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_obj_keep = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_idx_cat = 0; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED float __pyx_v_L_BOX; + CYTHON_UNUSED PyObject *__pyx_v_CENTER = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcDensProfsKernelBased (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_obj_keep,&__pyx_n_s_masses,&__pyx_n_s_r200s,&__pyx_n_s_ROverR200,&__pyx_n_s_idx_cat,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_L_BOX,&__pyx_n_s_CENTER,0}; + PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj_keep)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsKernelBased", 1, 9, 9, 1); __PYX_ERR(0, 110, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsKernelBased", 1, 9, 9, 2); __PYX_ERR(0, 110, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r200s)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsKernelBased", 1, 9, 9, 3); __PYX_ERR(0, 110, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ROverR200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsKernelBased", 1, 9, 9, 4); __PYX_ERR(0, 110, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_idx_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsKernelBased", 1, 9, 9, 5); __PYX_ERR(0, 110, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsKernelBased", 1, 9, 9, 6); __PYX_ERR(0, 110, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsKernelBased", 1, 9, 9, 7); __PYX_ERR(0, 110, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcDensProfsKernelBased", 1, 9, 9, 8); __PYX_ERR(0, 110, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcDensProfsKernelBased") < 0)) __PYX_ERR(0, 110, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 9) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 110, __pyx_L3_error) + __pyx_v_obj_keep = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_obj_keep.memview)) __PYX_ERR(0, 110, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 110, __pyx_L3_error) + __pyx_v_r200s = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r200s.memview)) __PYX_ERR(0, 110, __pyx_L3_error) + __pyx_v_ROverR200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ROverR200.memview)) __PYX_ERR(0, 110, __pyx_L3_error) + __pyx_v_idx_cat = values[5]; + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L3_error) + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[7]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[8]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcDensProfsKernelBased", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 110, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dens_profs.dens_profs_algos.calcDensProfsKernelBased", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 110, __pyx_L1_error) + __pyx_r = __pyx_pf_10dens_profs_16dens_profs_algos_6calcDensProfsKernelBased(__pyx_self, __pyx_v_xyz, __pyx_v_obj_keep, __pyx_v_masses, __pyx_v_r200s, __pyx_v_ROverR200, __pyx_v_idx_cat, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_L_BOX, __pyx_v_CENTER); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_10dens_profs_16dens_profs_algos_6calcDensProfsKernelBased(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_obj_keep, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200s, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ROverR200, CYTHON_UNUSED PyObject *__pyx_v_idx_cat, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED PyObject *__pyx_v_CENTER) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcDensProfsKernelBased", 0); + + /* "dens_profs/dens_profs_algos.pyx":140 + * :rtype: (nb_keep, r_res) float array""" + * + * return # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "dens_profs/dens_profs_algos.pyx":110 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsKernelBased(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates kernel-based density profiles for objects defined by indices found in `idx_cat` + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_obj_keep, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r200s, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_ROverR200, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + +/* Python wrapper */ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_shape = 0; + Py_ssize_t __pyx_v_itemsize; + PyObject *__pyx_v_format = 0; + PyObject *__pyx_v_mode = 0; + int __pyx_v_allocate_buffer; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[3] = ((PyObject *)__pyx_n_s_c); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(1, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(1, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 122, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_shape = ((PyObject*)values[0]); + __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 122, __pyx_L3_error) + __pyx_v_format = values[2]; + __pyx_v_mode = values[3]; + if (values[4]) { + __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 123, __pyx_L3_error) + } else { + + /* "View.MemoryView":123 + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, + * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< + * + * cdef int idx + */ + __pyx_v_allocate_buffer = ((int)1); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 122, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(1, 122, __pyx_L1_error) + if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { + PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(1, 122, __pyx_L1_error) + } + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + int __pyx_v_idx; + Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_dim; + PyObject **__pyx_v_p; + char __pyx_v_order; + int __pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + char *__pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + Py_ssize_t __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + __Pyx_INCREF(__pyx_v_format); + + /* "View.MemoryView":129 + * cdef PyObject **p + * + * self.ndim = len(shape) # <<<<<<<<<<<<<< + * self.itemsize = itemsize + * + */ + if (unlikely(__pyx_v_shape == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 129, __pyx_L1_error) + } + __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(1, 129, __pyx_L1_error) + __pyx_v_self->ndim = ((int)__pyx_t_1); + + /* "View.MemoryView":130 + * + * self.ndim = len(shape) + * self.itemsize = itemsize # <<<<<<<<<<<<<< + * + * if not self.ndim: + */ + __pyx_v_self->itemsize = __pyx_v_itemsize; + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 133, __pyx_L1_error) + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + } + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 136, __pyx_L1_error) + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + } + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + __pyx_t_2 = PyBytes_Check(__pyx_v_format); + __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":139 + * + * if not isinstance(format, bytes): + * format = format.encode('ASCII') # <<<<<<<<<<<<<< + * self._format = format # keep a reference to the byte string + * self.format = self._format + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + if (CYTHON_UNPACK_METHODS && likely(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_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + } + + /* "View.MemoryView":140 + * if not isinstance(format, bytes): + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< + * self.format = self._format + * + */ + if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(1, 140, __pyx_L1_error) + __pyx_t_3 = __pyx_v_format; + __Pyx_INCREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_v_self->_format); + __Pyx_DECREF(__pyx_v_self->_format); + __pyx_v_self->_format = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":141 + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + * self.format = self._format # <<<<<<<<<<<<<< + * + * + */ + if (unlikely(__pyx_v_self->_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); + __PYX_ERR(1, 141, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(1, 141, __pyx_L1_error) + __pyx_v_self->format = __pyx_t_7; + + /* "View.MemoryView":144 + * + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< + * self._strides = self._shape + self.ndim + * + */ + __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); + + /* "View.MemoryView":145 + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) + * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< + * + * if not self._shape: + */ + __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 148, __pyx_L1_error) + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + } + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + __pyx_t_8 = 0; + __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; + for (;;) { + if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(1, 151, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 151, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_9; + __pyx_v_idx = __pyx_t_8; + __pyx_t_8 = (__pyx_t_8 + 1); + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + __pyx_t_4 = ((__pyx_v_dim <= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":153 + * for idx, dim in enumerate(shape): + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) # <<<<<<<<<<<<<< + * self._shape[idx] = dim + * + */ + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6); + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 153, __pyx_L1_error) + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + } + + /* "View.MemoryView":154 + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim # <<<<<<<<<<<<<< + * + * cdef char order + */ + (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 157, __pyx_L1_error) + if (__pyx_t_4) { + + /* "View.MemoryView":158 + * cdef char order + * if mode == 'fortran': + * order = b'F' # <<<<<<<<<<<<<< + * self.mode = u'fortran' + * elif mode == 'c': + */ + __pyx_v_order = 'F'; + + /* "View.MemoryView":159 + * if mode == 'fortran': + * order = b'F' + * self.mode = u'fortran' # <<<<<<<<<<<<<< + * elif mode == 'c': + * order = b'C' + */ + __Pyx_INCREF(__pyx_n_u_fortran); + __Pyx_GIVEREF(__pyx_n_u_fortran); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_fortran; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 160, __pyx_L1_error) + if (likely(__pyx_t_4)) { + + /* "View.MemoryView":161 + * self.mode = u'fortran' + * elif mode == 'c': + * order = b'C' # <<<<<<<<<<<<<< + * self.mode = u'c' + * else: + */ + __pyx_v_order = 'C'; + + /* "View.MemoryView":162 + * elif mode == 'c': + * order = b'C' + * self.mode = u'c' # <<<<<<<<<<<<<< + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + */ + __Pyx_INCREF(__pyx_n_u_c); + __Pyx_GIVEREF(__pyx_n_u_c); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_c; + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":164 + * self.mode = u'c' + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) # <<<<<<<<<<<<<< + * + * self.len = fill_contig_strides_array(self._shape, self._strides, + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 164, __pyx_L1_error) + } + __pyx_L10:; + + /* "View.MemoryView":166 + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + * + * self.len = fill_contig_strides_array(self._shape, self._strides, # <<<<<<<<<<<<<< + * itemsize, self.ndim, order) + * + */ + __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); + + /* "View.MemoryView":169 + * itemsize, self.ndim, order) + * + * self.free_data = allocate_buffer # <<<<<<<<<<<<<< + * self.dtype_is_object = format == b'O' + * if allocate_buffer: + */ + __pyx_v_self->free_data = __pyx_v_allocate_buffer; + + /* "View.MemoryView":170 + * + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< + * if allocate_buffer: + * + */ + __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 170, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 170, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_v_self->dtype_is_object = __pyx_t_4; + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_4 = (__pyx_v_allocate_buffer != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":174 + * + * + * self.data = malloc(self.len) # <<<<<<<<<<<<<< + * if not self.data: + * raise MemoryError("unable to allocate array data.") + */ + __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 176, __pyx_L1_error) + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":179 + * + * if self.dtype_is_object: + * p = self.data # <<<<<<<<<<<<<< + * for i in range(self.len / itemsize): + * p[i] = Py_None + */ + __pyx_v_p = ((PyObject **)__pyx_v_self->data); + + /* "View.MemoryView":180 + * if self.dtype_is_object: + * p = self.data + * for i in range(self.len / itemsize): # <<<<<<<<<<<<<< + * p[i] = Py_None + * Py_INCREF(Py_None) + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 180, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 180, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize); + __pyx_t_9 = __pyx_t_1; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "View.MemoryView":181 + * p = self.data + * for i in range(self.len / itemsize): + * p[i] = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + (__pyx_v_p[__pyx_v_i]) = Py_None; + + /* "View.MemoryView":182 + * for i in range(self.len / itemsize): + * p[i] = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + Py_INCREF(Py_None); + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + } + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_format); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __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)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + int __pyx_v_bufmode; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + char *__pyx_t_4; + Py_ssize_t __pyx_t_5; + int __pyx_t_6; + Py_ssize_t *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":186 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 # <<<<<<<<<<<<<< + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = -1; + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 187, __pyx_L1_error) + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":188 + * cdef int bufmode = -1 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + goto __pyx_L3; + } + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 189, __pyx_L1_error) + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":190 + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + */ + __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + } + __pyx_L3:; + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 192, __pyx_L1_error) + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + } + + /* "View.MemoryView":193 + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data # <<<<<<<<<<<<<< + * info.len = self.len + * info.ndim = self.ndim + */ + __pyx_t_4 = __pyx_v_self->data; + __pyx_v_info->buf = __pyx_t_4; + + /* "View.MemoryView":194 + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + * info.len = self.len # <<<<<<<<<<<<<< + * info.ndim = self.ndim + * info.shape = self._shape + */ + __pyx_t_5 = __pyx_v_self->len; + __pyx_v_info->len = __pyx_t_5; + + /* "View.MemoryView":195 + * info.buf = self.data + * info.len = self.len + * info.ndim = self.ndim # <<<<<<<<<<<<<< + * info.shape = self._shape + * info.strides = self._strides + */ + __pyx_t_6 = __pyx_v_self->ndim; + __pyx_v_info->ndim = __pyx_t_6; + + /* "View.MemoryView":196 + * info.len = self.len + * info.ndim = self.ndim + * info.shape = self._shape # <<<<<<<<<<<<<< + * info.strides = self._strides + * info.suboffsets = NULL + */ + __pyx_t_7 = __pyx_v_self->_shape; + __pyx_v_info->shape = __pyx_t_7; + + /* "View.MemoryView":197 + * info.ndim = self.ndim + * info.shape = self._shape + * info.strides = self._strides # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = self.itemsize + */ + __pyx_t_7 = __pyx_v_self->_strides; + __pyx_v_info->strides = __pyx_t_7; + + /* "View.MemoryView":198 + * info.shape = self._shape + * info.strides = self._strides + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = self.itemsize + * info.readonly = 0 + */ + __pyx_v_info->suboffsets = NULL; + + /* "View.MemoryView":199 + * info.strides = self._strides + * info.suboffsets = NULL + * info.itemsize = self.itemsize # <<<<<<<<<<<<<< + * info.readonly = 0 + * + */ + __pyx_t_5 = __pyx_v_self->itemsize; + __pyx_v_info->itemsize = __pyx_t_5; + + /* "View.MemoryView":200 + * info.suboffsets = NULL + * info.itemsize = self.itemsize + * info.readonly = 0 # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + __pyx_v_info->readonly = 0; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":203 + * + * if flags & PyBUF_FORMAT: + * info.format = self.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_4 = __pyx_v_self->format; + __pyx_v_info->format = __pyx_t_4; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":205 + * info.format = self.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.obj = self + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L5:; + + /* "View.MemoryView":207 + * info.format = NULL + * + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + +/* Python wrapper */ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":213 + * def __dealloc__(array self): + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) # <<<<<<<<<<<<<< + * elif self.free_data: + * if self.dtype_is_object: + */ + __pyx_v_self->callback_free_data(__pyx_v_self->data); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + __pyx_t_1 = (__pyx_v_self->free_data != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":216 + * elif self.free_data: + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, # <<<<<<<<<<<<<< + * self._strides, self.ndim, False) + * free(self.data) + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + } + + /* "View.MemoryView":218 + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + * free(self.data) # <<<<<<<<<<<<<< + * PyObject_Free(self._shape) + * + */ + free(__pyx_v_self->data); + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + } + __pyx_L3:; + + /* "View.MemoryView":219 + * self._strides, self.ndim, False) + * free(self.data) + * PyObject_Free(self._shape) # <<<<<<<<<<<<<< + * + * @property + */ + PyObject_Free(__pyx_v_self->_shape); + + /* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__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("__get__", 0); + + /* "View.MemoryView":223 + * @property + * def memview(self): + * return self.get_memview() # <<<<<<<<<<<<<< + * + * @cname('get_memview') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) { + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_memview", 0); + + /* "View.MemoryView":227 + * @cname('get_memview') + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< + * return memoryview(self, flags, self.dtype_is_object) + * + */ + __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); + + /* "View.MemoryView":228 + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":231 + * + * def __len__(self): + * return self._shape[0] # <<<<<<<<<<<<<< + * + * def __getattr__(self, attr): + */ + __pyx_r = (__pyx_v_self->_shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getattr__", 0); + + /* "View.MemoryView":234 + * + * def __getattr__(self, attr): + * return getattr(self.memview, attr) # <<<<<<<<<<<<<< + * + * def __getitem__(self, item): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":237 + * + * def __getitem__(self, item): + * return self.memview[item] # <<<<<<<<<<<<<< + * + * def __setitem__(self, item, value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + +/* Python wrapper */ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + + /* "View.MemoryView":240 + * + * def __setitem__(self, item, value): + * self.memview[item] = value # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(1, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + +static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) { + struct __pyx_array_obj *__pyx_v_result = 0; + struct __pyx_array_obj *__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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("array_cwrapper", 0); + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":249 + * + * if buf == NULL: + * result = array(shape, itemsize, format, mode.decode('ASCII')) # <<<<<<<<<<<<<< + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4); + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + /*else*/ { + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":252 + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) # <<<<<<<<<<<<<< + * result.data = buf + * + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(1, 252, __pyx_L1_error) + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __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_v_result = ((struct __pyx_array_obj *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "View.MemoryView":253 + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) + * result.data = buf # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->data = __pyx_v_buf; + } + __pyx_L3:; + + /* "View.MemoryView":255 + * result.data = buf + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + + /* 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("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + +/* Python wrapper */ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_name = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0}; + PyObject* values[1] = {0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(1, 281, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + } + __pyx_v_name = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 281, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 0); + + /* "View.MemoryView":282 + * cdef object name + * def __init__(self, name): + * self.name = name # <<<<<<<<<<<<<< + * def __repr__(self): + * return self.name + */ + __Pyx_INCREF(__pyx_v_name); + __Pyx_GIVEREF(__pyx_v_name); + __Pyx_GOTREF(__pyx_v_self->name); + __Pyx_DECREF(__pyx_v_self->name); + __pyx_v_self->name = __pyx_v_name; + + /* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + +/* Python wrapper */ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":284 + * self.name = name + * def __repr__(self): + * return self.name # <<<<<<<<<<<<<< + * + * cdef generic = Enum("") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->name); + __pyx_r = __pyx_v_self->name; + goto __pyx_L0; + + /* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + + /* function exit code */ + __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___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__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; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.name,) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_self->name); + __Pyx_GIVEREF(__pyx_v_self->name); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); + __pyx_v_state = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":7 + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_2 = (__pyx_v__dict != Py_None); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); + __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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.name is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.name,) + * _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.name is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_self->name != Py_None); + __pyx_v_use_setstate = __pyx_t_3; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + __pyx_t_3 = (__pyx_v_use_setstate != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":13 + * use_setstate = self.name is not None + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __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_5); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __pyx_t_5 = 0; + __pyx_t_1 = 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_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.Enum.__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_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__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__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_unpickle_Enum__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_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__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("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + +static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) { + Py_intptr_t __pyx_v_aligned_p; + size_t __pyx_v_offset; + void *__pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":300 + * cdef void *align_pointer(void *memory, size_t alignment) nogil: + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory # <<<<<<<<<<<<<< + * cdef size_t offset + * + */ + __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory); + + /* "View.MemoryView":304 + * + * with cython.cdivision(True): + * offset = aligned_p % alignment # <<<<<<<<<<<<<< + * + * if offset > 0: + */ + __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + __pyx_t_1 = ((__pyx_v_offset > 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":307 + * + * if offset > 0: + * aligned_p += alignment - offset # <<<<<<<<<<<<<< + * + * return aligned_p + */ + __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset)); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + } + + /* "View.MemoryView":309 + * aligned_p += alignment - offset + * + * return aligned_p # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((void *)__pyx_v_aligned_p); + goto __pyx_L0; + + /* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + +/* Python wrapper */ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_obj = 0; + int __pyx_v_flags; + int __pyx_v_dtype_is_object; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(1, 345, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 345, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj = values[0]; + __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error) + if (values[2]) { + __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error) + } else { + __pyx_v_dtype_is_object = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 345, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + + /* "View.MemoryView":346 + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj # <<<<<<<<<<<<<< + * self.flags = flags + * if type(self) is memoryview or obj is not None: + */ + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + __Pyx_GOTREF(__pyx_v_self->obj); + __Pyx_DECREF(__pyx_v_self->obj); + __pyx_v_self->obj = __pyx_v_obj; + + /* "View.MemoryView":347 + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj + * self.flags = flags # <<<<<<<<<<<<<< + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + */ + __pyx_v_self->flags = __pyx_v_flags; + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type)); + __pyx_t_3 = (__pyx_t_2 != 0); + if (!__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_obj != Py_None); + __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { + + /* "View.MemoryView":349 + * self.flags = flags + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + */ + __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 349, __pyx_L1_error) + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":351 + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; + + /* "View.MemoryView":352 + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * global __pyx_memoryview_thread_locks_used + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + } + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + } + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":356 + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + */ + __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + + /* "View.MemoryView":357 + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<< + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1); + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":359 + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< + * if self.lock is NULL: + * raise MemoryError + */ + __pyx_v_self->lock = PyThread_allocate_lock(); + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":361 + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + PyErr_NoMemory(); __PYX_ERR(1, 361, __pyx_L1_error) + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + } + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":364 + * + * if flags & PyBUF_FORMAT: + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<< + * else: + * self.dtype_is_object = dtype_is_object + */ + __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_self->dtype_is_object = __pyx_t_1; + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + goto __pyx_L10; + } + + /* "View.MemoryView":366 + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + */ + /*else*/ { + __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; + } + __pyx_L10:; + + /* "View.MemoryView":368 + * self.dtype_is_object = dtype_is_object + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( # <<<<<<<<<<<<<< + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL + */ + __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int)))); + + /* "View.MemoryView":370 + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL # <<<<<<<<<<<<<< + * + * def __dealloc__(memoryview self): + */ + __pyx_v_self->typeinfo = NULL; + + /* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + +/* Python wrapper */ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { + int __pyx_v_i; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyThread_type_lock __pyx_t_6; + PyThread_type_lock __pyx_t_7; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + __pyx_t_1 = (__pyx_v_self->obj != Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":374 + * def __dealloc__(memoryview self): + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + */ + __Pyx_ReleaseBuffer((&__pyx_v_self->view)); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + __pyx_t_2 = ((((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":377 + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<< + * Py_DECREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL; + + /* "View.MemoryView":378 + * + * (<__pyx_buffer *> &self.view).obj = NULL + * Py_DECREF(Py_None) # <<<<<<<<<<<<<< + * + * cdef int i + */ + Py_DECREF(Py_None); + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + } + __pyx_L3:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":383 + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<< + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + */ + __pyx_t_3 = __pyx_memoryview_thread_locks_used; + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":385 + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<< + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1); + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":388 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<< + * break + * else: + */ + __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]); + + /* "View.MemoryView":387 + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break + */ + (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6; + (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7; + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + } + + /* "View.MemoryView":389 + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break # <<<<<<<<<<<<<< + * else: + * PyThread_free_lock(self.lock) + */ + goto __pyx_L6_break; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + } + } + /*else*/ { + + /* "View.MemoryView":391 + * break + * else: + * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + */ + PyThread_free_lock(__pyx_v_self->lock); + } + __pyx_L6_break:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + } + + /* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + Py_ssize_t __pyx_v_dim; + char *__pyx_v_itemp; + PyObject *__pyx_v_idx = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + PyObject *(*__pyx_t_4)(PyObject *); + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + char *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_item_pointer", 0); + + /* "View.MemoryView":395 + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< + * + * for dim, idx in enumerate(index): + */ + __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) { + __pyx_t_2 = __pyx_v_index; __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_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 397, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_4)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) 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(1, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) 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(1, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 397, __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(1, 397, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_1; + __pyx_t_1 = (__pyx_t_1 + 1); + + /* "View.MemoryView":398 + * + * for dim, idx in enumerate(index): + * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< + * + * return itemp + */ + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 398, __pyx_L1_error) + __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(1, 398, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_7; + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":400 + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + * return itemp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_itemp; + goto __pyx_L0; + + /* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_indices = NULL; + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + char *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":405 + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: + * return self # <<<<<<<<<<<<<< + * + * have_slices, indices = _unellipsify(index, self.view.ndim) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __pyx_r = ((PyObject *)__pyx_v_self); + goto __pyx_L0; + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + } + + /* "View.MemoryView":407 + * return self + * + * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * cdef char *itemp + */ + __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (likely(__pyx_t_3 != Py_None)) { + PyObject* sequence = __pyx_t_3; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 407, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 407, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_v_indices = __pyx_t_5; + __pyx_t_5 = 0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 410, __pyx_L1_error) + if (__pyx_t_2) { + + /* "View.MemoryView":411 + * cdef char *itemp + * if have_slices: + * return memview_slice(self, indices) # <<<<<<<<<<<<<< + * else: + * itemp = self.get_item_pointer(indices) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + } + + /* "View.MemoryView":413 + * return memview_slice(self, indices) + * else: + * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< + * return self.convert_item_to_object(itemp) + * + */ + /*else*/ { + __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(1, 413, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_6; + + /* "View.MemoryView":414 + * else: + * itemp = self.get_item_pointer(indices) + * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< + * + * def __setitem__(memoryview self, object index, object value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + +/* Python wrapper */ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_obj = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + __Pyx_INCREF(__pyx_v_index); + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + __pyx_t_1 = (__pyx_v_self->view.readonly != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 418, __pyx_L1_error) + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + } + + /* "View.MemoryView":420 + * raise TypeError("Cannot assign to read-only memoryview") + * + * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * if have_slices: + */ + __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (likely(__pyx_t_2 != Py_None)) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 420, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 420, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_3; + __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 422, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":423 + * + * if have_slices: + * obj = self.is_slice(value) # <<<<<<<<<<<<<< + * if obj: + * self.setitem_slice_assignment(self[index], obj) + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_obj = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 424, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":425 + * obj = self.is_slice(value) + * if obj: + * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< + * else: + * self.setitem_slice_assign_scalar(self[index], value) + */ + __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":427 + * self.setitem_slice_assignment(self[index], obj) + * else: + * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< + * else: + * self.setitem_indexed(index, value) + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(1, 427, __pyx_L1_error) + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L5:; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":429 + * self.setitem_slice_assign_scalar(self[index], value) + * else: + * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< + * + * cdef is_slice(self, obj): + */ + /*else*/ { + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L4:; + + /* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_slice", 0); + __Pyx_INCREF(__pyx_v_obj); + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + /*try:*/ { + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":435 + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) # <<<<<<<<<<<<<< + * except TypeError: + * return None + */ + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 435, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __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; + + /* "View.MemoryView":436 + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + * except TypeError: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); + if (__pyx_t_9) { + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(1, 436, __pyx_L6_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":437 + * self.dtype_is_object) + * except TypeError: + * return None # <<<<<<<<<<<<<< + * + * return obj + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_except_return; + } + goto __pyx_L6_except_error; + __pyx_L6_except_error:; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L1_error; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L0; + __pyx_L9_try_end:; + } + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + } + + /* "View.MemoryView":439 + * return None + * + * return obj # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assignment(self, dst, src): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_obj); + __pyx_r = __pyx_v_obj; + goto __pyx_L0; + + /* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { + __Pyx_memviewslice __pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_src_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + __Pyx_memviewslice *__pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 445, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 445, __pyx_L1_error) + + /* "View.MemoryView":446 + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], # <<<<<<<<<<<<<< + * src.ndim, dst.ndim, self.dtype_is_object) + * + */ + if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 446, __pyx_L1_error) + __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 446, __pyx_L1_error) + + /* "View.MemoryView":447 + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error) + + /* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { + int __pyx_v_array[0x80]; + void *__pyx_v_tmp; + void *__pyx_v_item; + __Pyx_memviewslice *__pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_tmp_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + char const *__pyx_t_6; + PyObject *__pyx_t_7 = NULL; + 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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); + + /* "View.MemoryView":451 + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + * cdef int array[128] + * cdef void *tmp = NULL # <<<<<<<<<<<<<< + * cdef void *item + * + */ + __pyx_v_tmp = NULL; + + /* "View.MemoryView":456 + * cdef __Pyx_memviewslice *dst_slice + * cdef __Pyx_memviewslice tmp_slice + * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< + * + * if self.view.itemsize > sizeof(array): + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 456, __pyx_L1_error) + __pyx_v_dst_slice = __pyx_t_1; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":459 + * + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< + * if tmp == NULL: + * raise MemoryError + */ + __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":461 + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * item = tmp + * else: + */ + PyErr_NoMemory(); __PYX_ERR(1, 461, __pyx_L1_error) + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + } + + /* "View.MemoryView":462 + * if tmp == NULL: + * raise MemoryError + * item = tmp # <<<<<<<<<<<<<< + * else: + * item = array + */ + __pyx_v_item = __pyx_v_tmp; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":464 + * item = tmp + * else: + * item = array # <<<<<<<<<<<<<< + * + * try: + */ + /*else*/ { + __pyx_v_item = ((void *)__pyx_v_array); + } + __pyx_L3:; + + /* "View.MemoryView":466 + * item = array + * + * try: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * ( item)[0] = value + */ + /*try:*/ { + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":468 + * try: + * if self.dtype_is_object: + * ( item)[0] = value # <<<<<<<<<<<<<< + * else: + * self.assign_item_from_object( item, value) + */ + (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":470 + * ( item)[0] = value + * else: + * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 470, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L8:; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":475 + * + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + * item, self.dtype_is_object) + */ + __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 475, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + } + + /* "View.MemoryView":476 + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< + * item, self.dtype_is_object) + * finally: + */ + __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); + } + + /* "View.MemoryView":479 + * item, self.dtype_is_object) + * finally: + * PyMem_Free(tmp) # <<<<<<<<<<<<<< + * + * cdef setitem_indexed(self, index, value): + */ + /*finally:*/ { + /*normal exit:*/{ + PyMem_Free(__pyx_v_tmp); + goto __pyx_L7; + } + __pyx_L6_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __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_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename; + { + PyMem_Free(__pyx_v_tmp); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + } + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6; + goto __pyx_L1_error; + } + __pyx_L7:; + } + + /* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_indexed", 0); + + /* "View.MemoryView":482 + * + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< + * self.assign_item_from_object(itemp, value) + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(1, 482, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_1; + + /* "View.MemoryView":483 + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_v_struct = NULL; + PyObject *__pyx_v_bytesitem = 0; + PyObject *__pyx_v_result = NULL; + 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; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + size_t __pyx_t_10; + int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":488 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef bytes bytesitem + * + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":491 + * cdef bytes bytesitem + * + * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< + * try: + * result = struct.unpack(self.view.format, bytesitem) + */ + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "View.MemoryView":493 + * bytesitem = itemp[:self.view.itemsize] + * try: + * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< + * except struct.error: + * raise ValueError("Unable to convert item to object") + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && 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; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + { + __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + if (__pyx_t_7) { + __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; + } + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6); + __Pyx_INCREF(__pyx_v_bytesitem); + __Pyx_GIVEREF(__pyx_v_bytesitem); + PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem); + __pyx_t_6 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + } + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + /*else:*/ { + __pyx_t_10 = strlen(__pyx_v_self->view.format); + __pyx_t_11 = ((__pyx_t_10 == 1) != 0); + if (__pyx_t_11) { + + /* "View.MemoryView":498 + * else: + * if len(self.view.format) == 1: + * return result[0] # <<<<<<<<<<<<<< + * return result + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 498, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6_except_return; + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + } + + /* "View.MemoryView":499 + * if len(self.view.format) == 1: + * return result[0] + * return result # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "View.MemoryView":494 + * try: + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: # <<<<<<<<<<<<<< + * raise ValueError("Unable to convert item to object") + * else: + */ + __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9); + __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0; + if (__pyx_t_8) { + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_1); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 495, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(1, 495, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesitem); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_v_struct = NULL; + char __pyx_v_c; + PyObject *__pyx_v_bytesvalue = 0; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + char *__pyx_t_11; + char *__pyx_t_12; + char *__pyx_t_13; + char *__pyx_t_14; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":504 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef char c + * cdef bytes bytesvalue + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + __pyx_t_2 = PyTuple_Check(__pyx_v_value); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "View.MemoryView":510 + * + * if isinstance(value, tuple): + * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< + * else: + * bytesvalue = struct.pack(self.view.format, value) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 510, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":512 + * bytesvalue = struct.pack(self.view.format, *value) + * else: + * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< + * + * for i, c in enumerate(bytesvalue): + */ + /*else*/ { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + { + __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (__pyx_t_5) { + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL; + } + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1); + __Pyx_INCREF(__pyx_v_value); + __Pyx_GIVEREF(__pyx_v_value); + PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value); + __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 512, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = 0; + if (unlikely(__pyx_v_bytesvalue == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); + __PYX_ERR(1, 514, __pyx_L1_error) + } + __Pyx_INCREF(__pyx_v_bytesvalue); + __pyx_t_10 = __pyx_v_bytesvalue; + __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10); + __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10)); + for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) { + __pyx_t_11 = __pyx_t_14; + __pyx_v_c = (__pyx_t_11[0]); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + __pyx_v_i = __pyx_t_9; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = (__pyx_t_9 + 1); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; + } + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* 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_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesvalue); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + char *__pyx_t_5; + void *__pyx_t_6; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->view.readonly != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 520, __pyx_L1_error) + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + } + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":523 + * + * if flags & PyBUF_ND: + * info.shape = self.view.shape # <<<<<<<<<<<<<< + * else: + * info.shape = NULL + */ + __pyx_t_4 = __pyx_v_self->view.shape; + __pyx_v_info->shape = __pyx_t_4; + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":525 + * info.shape = self.view.shape + * else: + * info.shape = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_STRIDES: + */ + /*else*/ { + __pyx_v_info->shape = NULL; + } + __pyx_L6:; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":528 + * + * if flags & PyBUF_STRIDES: + * info.strides = self.view.strides # <<<<<<<<<<<<<< + * else: + * info.strides = NULL + */ + __pyx_t_4 = __pyx_v_self->view.strides; + __pyx_v_info->strides = __pyx_t_4; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + goto __pyx_L7; + } + + /* "View.MemoryView":530 + * info.strides = self.view.strides + * else: + * info.strides = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_INDIRECT: + */ + /*else*/ { + __pyx_v_info->strides = NULL; + } + __pyx_L7:; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":533 + * + * if flags & PyBUF_INDIRECT: + * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< + * else: + * info.suboffsets = NULL + */ + __pyx_t_4 = __pyx_v_self->view.suboffsets; + __pyx_v_info->suboffsets = __pyx_t_4; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":535 + * info.suboffsets = self.view.suboffsets + * else: + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + /*else*/ { + __pyx_v_info->suboffsets = NULL; + } + __pyx_L8:; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":538 + * + * if flags & PyBUF_FORMAT: + * info.format = self.view.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_5 = __pyx_v_self->view.format; + __pyx_v_info->format = __pyx_t_5; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":540 + * info.format = self.view.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.buf = self.view.buf + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L9:; + + /* "View.MemoryView":542 + * info.format = NULL + * + * info.buf = self.view.buf # <<<<<<<<<<<<<< + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + */ + __pyx_t_6 = __pyx_v_self->view.buf; + __pyx_v_info->buf = __pyx_t_6; + + /* "View.MemoryView":543 + * + * info.buf = self.view.buf + * info.ndim = self.view.ndim # <<<<<<<<<<<<<< + * info.itemsize = self.view.itemsize + * info.len = self.view.len + */ + __pyx_t_7 = __pyx_v_self->view.ndim; + __pyx_v_info->ndim = __pyx_t_7; + + /* "View.MemoryView":544 + * info.buf = self.view.buf + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< + * info.len = self.view.len + * info.readonly = self.view.readonly + */ + __pyx_t_8 = __pyx_v_self->view.itemsize; + __pyx_v_info->itemsize = __pyx_t_8; + + /* "View.MemoryView":545 + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + * info.len = self.view.len # <<<<<<<<<<<<<< + * info.readonly = self.view.readonly + * info.obj = self + */ + __pyx_t_8 = __pyx_v_self->view.len; + __pyx_v_info->len = __pyx_t_8; + + /* "View.MemoryView":546 + * info.itemsize = self.view.itemsize + * info.len = self.view.len + * info.readonly = self.view.readonly # <<<<<<<<<<<<<< + * info.obj = self + * + */ + __pyx_t_1 = __pyx_v_self->view.readonly; + __pyx_v_info->readonly = __pyx_t_1; + + /* "View.MemoryView":547 + * info.len = self.view.len + * info.readonly = self.view.readonly + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":554 + * @property + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< + * transpose_memslice(&result.from_slice) + * return result + */ + __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(1, 554, __pyx_L1_error) + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":555 + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 555, __pyx_L1_error) + + /* "View.MemoryView":556 + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + * return result # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":560 + * @property + * def base(self): + * return self.obj # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->obj); + __pyx_r = __pyx_v_self->obj; + goto __pyx_L0; + + /* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_length; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":564 + * @property + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_length = (__pyx_t_2[0]); + __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_stride; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 570, __pyx_L1_error) + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + } + + /* "View.MemoryView":572 + * raise ValueError("Buffer view does not expose strides") + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_v_stride = (__pyx_t_3[0]); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + Py_ssize_t *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__12, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + } + + /* "View.MemoryView":579 + * return (-1,) * self.view.ndim + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim); + for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) { + __pyx_t_4 = __pyx_t_6; + __pyx_v_suboffset = (__pyx_t_4[0]); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__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("__get__", 0); + + /* "View.MemoryView":583 + * @property + * def ndim(self): + * return self.view.ndim # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 583, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__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("__get__", 0); + + /* "View.MemoryView":587 + * @property + * def itemsize(self): + * return self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 587, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":591 + * @property + * def nbytes(self): + * return self.size * self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + __pyx_t_1 = (__pyx_v_self->_size == Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":596 + * def size(self): + * if self._size is None: + * result = 1 # <<<<<<<<<<<<<< + * + * for length in self.view.shape[:self.view.ndim]: + */ + __Pyx_INCREF(__pyx_int_1); + __pyx_v_result = __pyx_int_1; + + /* "View.MemoryView":598 + * result = 1 + * + * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<< + * result *= length + * + */ + __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 598, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6); + __pyx_t_6 = 0; + + /* "View.MemoryView":599 + * + * for length in self.view.shape[:self.view.ndim]: + * result *= length # <<<<<<<<<<<<<< + * + * self._size = result + */ + __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6); + __pyx_t_6 = 0; + } + + /* "View.MemoryView":601 + * result *= length + * + * self._size = result # <<<<<<<<<<<<<< + * + * return self._size + */ + __Pyx_INCREF(__pyx_v_result); + __Pyx_GIVEREF(__pyx_v_result); + __Pyx_GOTREF(__pyx_v_self->_size); + __Pyx_DECREF(__pyx_v_self->_size); + __pyx_v_self->_size = __pyx_v_result; + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + } + + /* "View.MemoryView":603 + * self._size = result + * + * return self._size # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->_size); + __pyx_r = __pyx_v_self->_size; + goto __pyx_L0; + + /* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":607 + * def __len__(self): + * if self.view.ndim >= 1: + * return self.view.shape[0] # <<<<<<<<<<<<<< + * + * return 0 + */ + __pyx_r = (__pyx_v_self->view.shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + } + + /* "View.MemoryView":609 + * return self.view.shape[0] + * + * return 0 # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":613 + * def __repr__(self): + * return "" % (self.base.__class__.__name__, + * id(self)) # <<<<<<<<<<<<<< + * + * def __str__(self): + */ + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 613, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__str__", 0); + + /* "View.MemoryView":616 + * + * def __str__(self): + * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __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; + + /* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_c_contig", 0); + + /* "View.MemoryView":622 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 622, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":623 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<< + * + * def is_f_contig(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_f_contig", 0); + + /* "View.MemoryView":628 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 628, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":629 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<< + * + * def copy(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_mslice; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy", 0); + + /* "View.MemoryView":633 + * def copy(self): + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &mslice) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); + + /* "View.MemoryView":635 + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + * + * slice_copy(self, &mslice) # <<<<<<<<<<<<<< + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); + + /* "View.MemoryView":636 + * + * slice_copy(self, &mslice) + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_C_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 636, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":641 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< + * + * def copy_fortran(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy_fortran", 0); + + /* "View.MemoryView":645 + * def copy_fortran(self): + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &src) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); + + /* "View.MemoryView":647 + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + * + * slice_copy(self, &src) # <<<<<<<<<<<<<< + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); + + /* "View.MemoryView":648 + * + * slice_copy(self, &src) + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_F_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 648, __pyx_L1_error) + __pyx_v_dst = __pyx_t_1; + + /* "View.MemoryView":653 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 653, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __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): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + +static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { + struct __pyx_memoryview_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); + + /* "View.MemoryView":658 + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< + * result.typeinfo = typeinfo + * return result + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_o); + __Pyx_GIVEREF(__pyx_v_o); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":659 + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_v_result->typeinfo = __pyx_v_typeinfo; + + /* "View.MemoryView":660 + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_check') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("memoryview_check", 0); + + /* "View.MemoryView":664 + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): + * return isinstance(o, memoryview) # <<<<<<<<<<<<<< + * + * cdef tuple _unellipsify(object index, int ndim): + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); + __pyx_r = __pyx_t_1; + goto __pyx_L0; + + /* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + +static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { + PyObject *__pyx_v_tup = NULL; + PyObject *__pyx_v_result = NULL; + int __pyx_v_have_slices; + int __pyx_v_seen_ellipsis; + CYTHON_UNUSED PyObject *__pyx_v_idx = NULL; + PyObject *__pyx_v_item = NULL; + Py_ssize_t __pyx_v_nslices; + 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)(PyObject *); + PyObject *__pyx_t_7 = NULL; + Py_ssize_t __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_unellipsify", 0); + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + __pyx_t_1 = PyTuple_Check(__pyx_v_index); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":672 + * """ + * if not isinstance(index, tuple): + * tup = (index,) # <<<<<<<<<<<<<< + * else: + * tup = index + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 672, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_index); + __Pyx_GIVEREF(__pyx_v_index); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); + __pyx_v_tup = __pyx_t_3; + __pyx_t_3 = 0; + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":674 + * tup = (index,) + * else: + * tup = index # <<<<<<<<<<<<<< + * + * result = [] + */ + /*else*/ { + __Pyx_INCREF(__pyx_v_index); + __pyx_v_tup = __pyx_v_index; + } + __pyx_L3:; + + /* "View.MemoryView":676 + * tup = index + * + * result = [] # <<<<<<<<<<<<<< + * have_slices = False + * seen_ellipsis = False + */ + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 676, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_result = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":677 + * + * result = [] + * have_slices = False # <<<<<<<<<<<<<< + * seen_ellipsis = False + * for idx, item in enumerate(tup): + */ + __pyx_v_have_slices = 0; + + /* "View.MemoryView":678 + * result = [] + * have_slices = False + * seen_ellipsis = False # <<<<<<<<<<<<<< + * for idx, item in enumerate(tup): + * if item is Ellipsis: + */ + __pyx_v_seen_ellipsis = 0; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + __Pyx_INCREF(__pyx_int_0); + __pyx_t_3 = __pyx_int_0; + if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) { + __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 679, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_4))) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } else { + if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } + } else { + __pyx_t_7 = __pyx_t_6(__pyx_t_4); + if (unlikely(!__pyx_t_7)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 679, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_7); + } + __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_INCREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3); + __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_7; + __pyx_t_7 = 0; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(1, 682, __pyx_L1_error) + __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__15); + __Pyx_GIVEREF(__pyx_slice__15); + PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__15); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":683 + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True # <<<<<<<<<<<<<< + * else: + * result.append(slice(None)) + */ + __pyx_v_seen_ellipsis = 1; + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + goto __pyx_L7; + } + + /* "View.MemoryView":685 + * seen_ellipsis = True + * else: + * result.append(slice(None)) # <<<<<<<<<<<<<< + * have_slices = True + * else: + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__15); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 685, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":686 + * else: + * result.append(slice(None)) + * have_slices = True # <<<<<<<<<<<<<< + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + */ + __pyx_v_have_slices = 1; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + goto __pyx_L6; + } + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + /*else*/ { + __pyx_t_2 = PySlice_Check(__pyx_v_item); + __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0); + __pyx_t_1 = __pyx_t_10; + __pyx_L9_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":689 + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + * raise TypeError("Cannot index with type '%s'" % type(item)) # <<<<<<<<<<<<<< + * + * have_slices = have_slices or isinstance(item, slice) + */ + __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_Raise(__pyx_t_11, 0, 0, 0); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __PYX_ERR(1, 689, __pyx_L1_error) + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + } + + /* "View.MemoryView":691 + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + * have_slices = have_slices or isinstance(item, slice) # <<<<<<<<<<<<<< + * result.append(item) + * + */ + __pyx_t_10 = (__pyx_v_have_slices != 0); + if (!__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = PySlice_Check(__pyx_v_item); + __pyx_t_2 = (__pyx_t_10 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_have_slices = __pyx_t_1; + + /* "View.MemoryView":692 + * + * have_slices = have_slices or isinstance(item, slice) + * result.append(item) # <<<<<<<<<<<<<< + * + * nslices = ndim - len(result) + */ + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 692, __pyx_L1_error) + } + __pyx_L6:; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":694 + * result.append(item) + * + * nslices = ndim - len(result) # <<<<<<<<<<<<<< + * if nslices: + * result.extend([slice(None)] * nslices) + */ + __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 694, __pyx_L1_error) + __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5); + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + __pyx_t_1 = (__pyx_v_nslices != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":696 + * nslices = ndim - len(result) + * if nslices: + * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<< + * + * return have_slices or nslices, tuple(result) + */ + __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__15); + __Pyx_GIVEREF(__pyx_slice__15); + PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__15); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 696, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + } + + /* "View.MemoryView":698 + * result.extend([slice(None)] * nslices) + * + * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + */ + __Pyx_XDECREF(__pyx_r); + if (!__pyx_v_have_slices) { + } else { + __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_L14_bool_binop_done:; + __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_r = ((PyObject*)__pyx_t_11); + __pyx_t_11 = 0; + goto __pyx_L0; + + /* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_tup); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_XDECREF(__pyx_v_item); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + +static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); + + /* "View.MemoryView":701 + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") + */ + __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim); + for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) { + __pyx_t_1 = __pyx_t_3; + __pyx_v_suboffset = (__pyx_t_1[0]); + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __PYX_ERR(1, 703, __pyx_L1_error) + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + } + } + + /* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { + int __pyx_v_new_ndim; + int __pyx_v_suboffset_dim; + int __pyx_v_dim; + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + __Pyx_memviewslice *__pyx_v_p_src; + struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; + __Pyx_memviewslice *__pyx_v_p_dst; + int *__pyx_v_p_suboffset_dim; + Py_ssize_t __pyx_v_start; + Py_ssize_t __pyx_v_stop; + Py_ssize_t __pyx_v_step; + int __pyx_v_have_start; + int __pyx_v_have_stop; + int __pyx_v_have_step; + PyObject *__pyx_v_index = NULL; + struct __pyx_memoryview_obj *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + struct __pyx_memoryview_obj *__pyx_t_4; + char *__pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + PyObject *(*__pyx_t_8)(PyObject *); + PyObject *__pyx_t_9 = NULL; + Py_ssize_t __pyx_t_10; + int __pyx_t_11; + Py_ssize_t __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memview_slice", 0); + + /* "View.MemoryView":711 + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): + * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< + * cdef bint negative_step + * cdef __Pyx_memviewslice src, dst + */ + __pyx_v_new_ndim = 0; + __pyx_v_suboffset_dim = -1; + + /* "View.MemoryView":718 + * + * + * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< + * + * cdef _memoryviewslice memviewsliceobj + */ + (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst)))); + + /* "View.MemoryView":722 + * cdef _memoryviewslice memviewsliceobj + * + * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(!Py_OptimizeFlag)) { + if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) { + PyErr_SetNone(PyExc_AssertionError); + __PYX_ERR(1, 722, __pyx_L1_error) + } + } + #endif + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":725 + * + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview # <<<<<<<<<<<<<< + * p_src = &memviewsliceobj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 725, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":726 + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, &src) + */ + __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + goto __pyx_L3; + } + + /* "View.MemoryView":728 + * p_src = &memviewsliceobj.from_slice + * else: + * slice_copy(memview, &src) # <<<<<<<<<<<<<< + * p_src = &src + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); + + /* "View.MemoryView":729 + * else: + * slice_copy(memview, &src) + * p_src = &src # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_p_src = (&__pyx_v_src); + } + __pyx_L3:; + + /* "View.MemoryView":735 + * + * + * dst.memview = p_src.memview # <<<<<<<<<<<<<< + * dst.data = p_src.data + * + */ + __pyx_t_4 = __pyx_v_p_src->memview; + __pyx_v_dst.memview = __pyx_t_4; + + /* "View.MemoryView":736 + * + * dst.memview = p_src.memview + * dst.data = p_src.data # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_v_p_src->data; + __pyx_v_dst.data = __pyx_t_5; + + /* "View.MemoryView":741 + * + * + * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< + * cdef int *p_suboffset_dim = &suboffset_dim + * cdef Py_ssize_t start, stop, step + */ + __pyx_v_p_dst = (&__pyx_v_dst); + + /* "View.MemoryView":742 + * + * cdef __Pyx_memviewslice *p_dst = &dst + * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< + * cdef Py_ssize_t start, stop, step + * cdef bint have_start, have_stop, have_step + */ + __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + __pyx_t_6 = 0; + if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { + __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + } else { + __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 746, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_8)) { + if (likely(PyList_CheckExact(__pyx_t_3))) { + if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } else { + if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } + } else { + __pyx_t_9 = __pyx_t_8(__pyx_t_3); + if (unlikely(!__pyx_t_9)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 746, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_9); + } + __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9); + __pyx_t_9 = 0; + __pyx_v_dim = __pyx_t_6; + __pyx_t_6 = (__pyx_t_6 + 1); + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":751 + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + * index, 0, 0, # start, stop, step # <<<<<<<<<<<<<< + * 0, 0, 0, # have_{start,stop,step} + * False) + */ + __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 751, __pyx_L1_error) + + /* "View.MemoryView":748 + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 748, __pyx_L1_error) + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + goto __pyx_L6; + } + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + __pyx_t_2 = (__pyx_v_index == Py_None); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":755 + * False) + * elif index is None: + * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + */ + (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; + + /* "View.MemoryView":756 + * elif index is None: + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 + */ + (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; + + /* "View.MemoryView":757 + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< + * new_ndim += 1 + * else: + */ + (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L; + + /* "View.MemoryView":758 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 # <<<<<<<<<<<<<< + * else: + * start = index.start or 0 + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + goto __pyx_L6; + } + + /* "View.MemoryView":760 + * new_ndim += 1 + * else: + * start = index.start or 0 # <<<<<<<<<<<<<< + * stop = index.stop or 0 + * step = index.step or 0 + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 760, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 760, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L7_bool_binop_done:; + __pyx_v_start = __pyx_t_10; + + /* "View.MemoryView":761 + * else: + * start = index.start or 0 + * stop = index.stop or 0 # <<<<<<<<<<<<<< + * step = index.step or 0 + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 761, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 761, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L9_bool_binop_done:; + __pyx_v_stop = __pyx_t_10; + + /* "View.MemoryView":762 + * start = index.start or 0 + * stop = index.stop or 0 + * step = index.step or 0 # <<<<<<<<<<<<<< + * + * have_start = index.start is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 762, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 762, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L11_bool_binop_done:; + __pyx_v_step = __pyx_t_10; + + /* "View.MemoryView":764 + * step = index.step or 0 + * + * have_start = index.start is not None # <<<<<<<<<<<<<< + * have_stop = index.stop is not None + * have_step = index.step is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_start = __pyx_t_1; + + /* "View.MemoryView":765 + * + * have_start = index.start is not None + * have_stop = index.stop is not None # <<<<<<<<<<<<<< + * have_step = index.step is not None + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_stop = __pyx_t_1; + + /* "View.MemoryView":766 + * have_start = index.start is not None + * have_stop = index.stop is not None + * have_step = index.step is not None # <<<<<<<<<<<<<< + * + * slice_memviewslice( + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_step = __pyx_t_1; + + /* "View.MemoryView":768 + * have_step = index.step is not None + * + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 768, __pyx_L1_error) + + /* "View.MemoryView":774 + * have_start, have_stop, have_step, + * True) + * new_ndim += 1 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + } + __pyx_L6:; + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":778 + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< + * memviewsliceobj.to_dtype_func, + * memview.dtype_is_object) + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 778, __pyx_L1_error) } + + /* "View.MemoryView":779 + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * else: + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 779, __pyx_L1_error) } + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 777, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 777, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + } + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + /*else*/ { + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":783 + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 782, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { + Py_ssize_t __pyx_v_new_shape; + int __pyx_v_negative_step; + int __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + __pyx_t_1 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":830 + * + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + } + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + __pyx_t_1 = (0 <= __pyx_v_start); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); + } + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":832 + * start += shape + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< + * else: + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 832, __pyx_L1_error) + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + } + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":835 + * else: + * + * negative_step = have_step != 0 and step < 0 # <<<<<<<<<<<<<< + * + * if have_step and step == 0: + */ + /*else*/ { + __pyx_t_1 = ((__pyx_v_have_step != 0) != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step < 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L6_bool_binop_done:; + __pyx_v_negative_step = __pyx_t_2; + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + __pyx_t_1 = (__pyx_v_have_step != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step == 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L9_bool_binop_done:; + if (__pyx_t_2) { + + /* "View.MemoryView":838 + * + * if have_step and step == 0: + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 838, __pyx_L1_error) + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + } + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + __pyx_t_2 = (__pyx_v_have_start != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":843 + * if have_start: + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if start < 0: + * start = 0 + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":845 + * start += shape + * if start < 0: + * start = 0 # <<<<<<<<<<<<<< + * elif start >= shape: + * if negative_step: + */ + __pyx_v_start = 0; + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + } + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + goto __pyx_L12; + } + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":848 + * elif start >= shape: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = shape + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L14; + } + + /* "View.MemoryView":850 + * start = shape - 1 + * else: + * start = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + /*else*/ { + __pyx_v_start = __pyx_v_shape; + } + __pyx_L14:; + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + } + __pyx_L12:; + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + goto __pyx_L11; + } + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":853 + * else: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = 0 + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L15; + } + + /* "View.MemoryView":855 + * start = shape - 1 + * else: + * start = 0 # <<<<<<<<<<<<<< + * + * if have_stop: + */ + /*else*/ { + __pyx_v_start = 0; + } + __pyx_L15:; + } + __pyx_L11:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + __pyx_t_2 = (__pyx_v_have_stop != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":859 + * if have_stop: + * if stop < 0: + * stop += shape # <<<<<<<<<<<<<< + * if stop < 0: + * stop = 0 + */ + __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":861 + * stop += shape + * if stop < 0: + * stop = 0 # <<<<<<<<<<<<<< + * elif stop > shape: + * stop = shape + */ + __pyx_v_stop = 0; + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + } + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + goto __pyx_L17; + } + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":863 + * stop = 0 + * elif stop > shape: + * stop = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + __pyx_v_stop = __pyx_v_shape; + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + } + __pyx_L17:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + goto __pyx_L16; + } + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":866 + * else: + * if negative_step: + * stop = -1 # <<<<<<<<<<<<<< + * else: + * stop = shape + */ + __pyx_v_stop = -1L; + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + goto __pyx_L19; + } + + /* "View.MemoryView":868 + * stop = -1 + * else: + * stop = shape # <<<<<<<<<<<<<< + * + * if not have_step: + */ + /*else*/ { + __pyx_v_stop = __pyx_v_shape; + } + __pyx_L19:; + } + __pyx_L16:; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":871 + * + * if not have_step: + * step = 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_step = 1; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + } + + /* "View.MemoryView":875 + * + * with cython.cdivision(True): + * new_shape = (stop - start) // step # <<<<<<<<<<<<<< + * + * if (stop - start) - step * new_shape: + */ + __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":878 + * + * if (stop - start) - step * new_shape: + * new_shape += 1 # <<<<<<<<<<<<<< + * + * if new_shape < 0: + */ + __pyx_v_new_shape = (__pyx_v_new_shape + 1); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + } + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":881 + * + * if new_shape < 0: + * new_shape = 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_new_shape = 0; + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + } + + /* "View.MemoryView":884 + * + * + * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset + */ + (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); + + /* "View.MemoryView":885 + * + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< + * dst.suboffsets[new_ndim] = suboffset + * + */ + (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; + + /* "View.MemoryView":886 + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; + } + __pyx_L3:; + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":890 + * + * if suboffset_dim[0] < 0: + * dst.data += start * stride # <<<<<<<<<<<<<< + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride + */ + __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + goto __pyx_L23; + } + + /* "View.MemoryView":892 + * dst.data += start * stride + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< + * + * if suboffset >= 0: + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_suboffset_dim[0]); + (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); + } + __pyx_L23:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":897 + * if not is_slice: + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + */ + __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + goto __pyx_L26; + } + + /* "View.MemoryView":899 + * dst.data = ( dst.data)[0] + suboffset + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< + * "must be indexed and not sliced", dim) + * else: + */ + /*else*/ { + + /* "View.MemoryView":900 + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<< + * else: + * suboffset_dim[0] = new_ndim + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 899, __pyx_L1_error) + } + __pyx_L26:; + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + goto __pyx_L25; + } + + /* "View.MemoryView":902 + * "must be indexed and not sliced", dim) + * else: + * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< + * + * return 0 + */ + /*else*/ { + (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; + } + __pyx_L25:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + } + + /* "View.MemoryView":904 + * suboffset_dim[0] = new_ndim + * + * return 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + +static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_suboffset; + Py_ssize_t __pyx_v_itemsize; + char *__pyx_v_resultp; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("pybuffer_index", 0); + + /* "View.MemoryView":912 + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< + * cdef Py_ssize_t itemsize = view.itemsize + * cdef char *resultp + */ + __pyx_v_suboffset = -1L; + + /* "View.MemoryView":913 + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< + * cdef char *resultp + * + */ + __pyx_t_1 = __pyx_v_view->itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":917 + * + * if view.ndim == 0: + * shape = view.len / itemsize # <<<<<<<<<<<<<< + * stride = itemsize + * else: + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 917, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 917, __pyx_L1_error) + } + __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize); + + /* "View.MemoryView":918 + * if view.ndim == 0: + * shape = view.len / itemsize + * stride = itemsize # <<<<<<<<<<<<<< + * else: + * shape = view.shape[dim] + */ + __pyx_v_stride = __pyx_v_itemsize; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + goto __pyx_L3; + } + + /* "View.MemoryView":920 + * stride = itemsize + * else: + * shape = view.shape[dim] # <<<<<<<<<<<<<< + * stride = view.strides[dim] + * if view.suboffsets != NULL: + */ + /*else*/ { + __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); + + /* "View.MemoryView":921 + * else: + * shape = view.shape[dim] + * stride = view.strides[dim] # <<<<<<<<<<<<<< + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] + */ + __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":923 + * stride = view.strides[dim] + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< + * + * if index < 0: + */ + __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + } + } + __pyx_L3:; + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":926 + * + * if index < 0: + * index += view.shape[dim] # <<<<<<<<<<<<<< + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + */ + __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":928 + * index += view.shape[dim] + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * if index >= shape: + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 928, __pyx_L1_error) + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + } + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":931 + * + * if index >= shape: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * resultp = bufp + index * stride + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 931, __pyx_L1_error) + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":933 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * resultp = bufp + index * stride # <<<<<<<<<<<<<< + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset + */ + __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":935 + * resultp = bufp + index * stride + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< + * + * return resultp + */ + __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + } + + /* "View.MemoryView":937 + * resultp = ( resultp)[0] + suboffset + * + * return resultp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_resultp; + goto __pyx_L0; + + /* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + +static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { + int __pyx_v_ndim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_r; + int __pyx_t_1; + Py_ssize_t *__pyx_t_2; + long __pyx_t_3; + long __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":944 + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: + * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< + * + * cdef Py_ssize_t *shape = memslice.shape + */ + __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; + __pyx_v_ndim = __pyx_t_1; + + /* "View.MemoryView":946 + * cdef int ndim = memslice.memview.view.ndim + * + * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< + * cdef Py_ssize_t *strides = memslice.strides + * + */ + __pyx_t_2 = __pyx_v_memslice->shape; + __pyx_v_shape = __pyx_t_2; + + /* "View.MemoryView":947 + * + * cdef Py_ssize_t *shape = memslice.shape + * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __pyx_v_memslice->strides; + __pyx_v_strides = __pyx_t_2; + + /* "View.MemoryView":951 + * + * cdef int i, j + * for i in range(ndim / 2): # <<<<<<<<<<<<<< + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + */ + __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2); + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":952 + * cdef int i, j + * for i in range(ndim / 2): + * j = ndim - 1 - i # <<<<<<<<<<<<<< + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] + */ + __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); + + /* "View.MemoryView":953 + * for i in range(ndim / 2): + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< + * shape[i], shape[j] = shape[j], shape[i] + * + */ + __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]); + __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]); + (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5; + (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6; + + /* "View.MemoryView":954 + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + */ + __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]); + __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]); + (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6; + (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5; + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0); + if (!__pyx_t_8) { + } else { + __pyx_t_7 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0); + __pyx_t_7 = __pyx_t_8; + __pyx_L6_bool_binop_done:; + if (__pyx_t_7) { + + /* "View.MemoryView":957 + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< + * + * return 1 + */ + __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 957, __pyx_L1_error) + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + } + } + + /* "View.MemoryView":959 + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + * return 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 1; + goto __pyx_L0; + + /* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = 0; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + +/* Python wrapper */ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":977 + * + * def __dealloc__(self): + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1); + + /* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":981 + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) # <<<<<<<<<<<<<< + * else: + * return memoryview.convert_item_to_object(self, itemp) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 981, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + } + + /* "View.MemoryView":983 + * return self.to_object_func(itemp) + * else: + * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 983, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":987 + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< + * else: + * memoryview.assign_item_from_object(self, itemp, value) + */ + __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 987, __pyx_L1_error) + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":989 + * self.to_dtype_func(itemp, value) + * else: + * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< + * + * @property + */ + /*else*/ { + __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 989, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":993 + * @property + * def base(self): + * return self.from_object # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->from_object); + __pyx_r = __pyx_v_self->from_object; + goto __pyx_L0; + + /* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_TypeInfo *__pyx_t_4; + Py_buffer __pyx_t_5; + Py_ssize_t *__pyx_t_6; + Py_ssize_t *__pyx_t_7; + Py_ssize_t *__pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_fromslice", 0); + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1008 + * + * if memviewslice.memview == Py_None: + * return None # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "View.MemoryView":1013 + * + * + * result = _memoryviewslice(None, 0, dtype_is_object) # <<<<<<<<<<<<<< + * + * result.from_slice = memviewslice + */ + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1015 + * result = _memoryviewslice(None, 0, dtype_is_object) + * + * result.from_slice = memviewslice # <<<<<<<<<<<<<< + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + */ + __pyx_v_result->from_slice = __pyx_v_memviewslice; + + /* "View.MemoryView":1016 + * + * result.from_slice = memviewslice + * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< + * + * result.from_object = ( memviewslice.memview).base + */ + __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); + + /* "View.MemoryView":1018 + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + * result.from_object = ( memviewslice.memview).base # <<<<<<<<<<<<<< + * result.typeinfo = memviewslice.memview.typeinfo + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1018, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_result->from_object); + __Pyx_DECREF(__pyx_v_result->from_object); + __pyx_v_result->from_object = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":1019 + * + * result.from_object = ( memviewslice.memview).base + * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< + * + * result.view = memviewslice.memview.view + */ + __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; + __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; + + /* "View.MemoryView":1021 + * result.typeinfo = memviewslice.memview.typeinfo + * + * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + */ + __pyx_t_5 = __pyx_v_memviewslice.memview->view; + __pyx_v_result->__pyx_base.view = __pyx_t_5; + + /* "View.MemoryView":1022 + * + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + */ + __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); + + /* "View.MemoryView":1023 + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data + * result.view.ndim = ndim # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; + + /* "View.MemoryView":1024 + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; + + /* "View.MemoryView":1025 + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1028 + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< + * else: + * result.flags = PyBUF_RECORDS_RO + */ + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1030 + * result.flags = PyBUF_RECORDS + * else: + * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<< + * + * result.view.shape = result.from_slice.shape + */ + /*else*/ { + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO; + } + __pyx_L4:; + + /* "View.MemoryView":1032 + * result.flags = PyBUF_RECORDS_RO + * + * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< + * result.view.strides = result.from_slice.strides + * + */ + __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); + + /* "View.MemoryView":1033 + * + * result.view.shape = result.from_slice.shape + * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); + + /* "View.MemoryView":1036 + * + * + * result.view.suboffsets = NULL # <<<<<<<<<<<<<< + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + */ + __pyx_v_result->__pyx_base.view.suboffsets = NULL; + + /* "View.MemoryView":1037 + * + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + */ + __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_v_suboffset = (__pyx_t_6[0]); + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1039 + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); + + /* "View.MemoryView":1040 + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + * break # <<<<<<<<<<<<<< + * + * result.view.len = result.view.itemsize + */ + goto __pyx_L6_break; + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + } + } + __pyx_L6_break:; + + /* "View.MemoryView":1042 + * break + * + * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< + * for length in result.view.shape[:ndim]: + * result.view.len *= length + */ + __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + + /* "View.MemoryView":1043 + * + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<< + * result.view.len *= length + * + */ + __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1044 + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: + * result.view.len *= length # <<<<<<<<<<<<<< + * + * result.to_object_func = to_object_func + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + } + + /* "View.MemoryView":1046 + * result.view.len *= length + * + * result.to_object_func = to_object_func # <<<<<<<<<<<<<< + * result.to_dtype_func = to_dtype_func + * + */ + __pyx_v_result->to_object_func = __pyx_v_to_object_func; + + /* "View.MemoryView":1047 + * + * result.to_object_func = to_object_func + * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; + + /* "View.MemoryView":1049 + * result.to_dtype_func = to_dtype_func + * + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { + struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; + __Pyx_memviewslice *__pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_slice_from_memview", 0); + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1056 + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): + * obj = memview # <<<<<<<<<<<<<< + * return &obj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 1056, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":1057 + * if isinstance(memview, _memoryviewslice): + * obj = memview + * return &obj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, mslice) + */ + __pyx_r = (&__pyx_v_obj->from_slice); + goto __pyx_L0; + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + } + + /* "View.MemoryView":1059 + * return &obj.from_slice + * else: + * slice_copy(memview, mslice) # <<<<<<<<<<<<<< + * return mslice + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); + + /* "View.MemoryView":1060 + * else: + * slice_copy(memview, mslice) + * return mslice # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_slice_copy') + */ + __pyx_r = __pyx_v_mslice; + goto __pyx_L0; + } + + /* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_obj); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { + int __pyx_v_dim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + Py_ssize_t *__pyx_v_suboffsets; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + __Pyx_RefNannySetupContext("slice_copy", 0); + + /* "View.MemoryView":1067 + * cdef (Py_ssize_t*) shape, strides, suboffsets + * + * shape = memview.view.shape # <<<<<<<<<<<<<< + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets + */ + __pyx_t_1 = __pyx_v_memview->view.shape; + __pyx_v_shape = __pyx_t_1; + + /* "View.MemoryView":1068 + * + * shape = memview.view.shape + * strides = memview.view.strides # <<<<<<<<<<<<<< + * suboffsets = memview.view.suboffsets + * + */ + __pyx_t_1 = __pyx_v_memview->view.strides; + __pyx_v_strides = __pyx_t_1; + + /* "View.MemoryView":1069 + * shape = memview.view.shape + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< + * + * dst.memview = <__pyx_memoryview *> memview + */ + __pyx_t_1 = __pyx_v_memview->view.suboffsets; + __pyx_v_suboffsets = __pyx_t_1; + + /* "View.MemoryView":1071 + * suboffsets = memview.view.suboffsets + * + * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< + * dst.data = memview.view.buf + * + */ + __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); + + /* "View.MemoryView":1072 + * + * dst.memview = <__pyx_memoryview *> memview + * dst.data = memview.view.buf # <<<<<<<<<<<<<< + * + * for dim in range(memview.view.ndim): + */ + __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); + + /* "View.MemoryView":1074 + * dst.data = memview.view.buf + * + * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + */ + __pyx_t_2 = __pyx_v_memview->view.ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_dim = __pyx_t_4; + + /* "View.MemoryView":1075 + * + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + */ + (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); + + /* "View.MemoryView":1076 + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + * + */ + (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); + + /* "View.MemoryView":1077 + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object') + */ + if ((__pyx_v_suboffsets != 0)) { + __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]); + } else { + __pyx_t_5 = -1L; + } + (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5; + } + + /* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { + __Pyx_memviewslice __pyx_v_memviewslice; + 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("memoryview_copy", 0); + + /* "View.MemoryView":1083 + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< + * return memoryview_copy_from_slice(memview, &memviewslice) + * + */ + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); + + /* "View.MemoryView":1084 + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) + * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object_from_slice') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { + PyObject *(*__pyx_v_to_object_func)(char *); + int (*__pyx_v_to_dtype_func)(char *, PyObject *); + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *(*__pyx_t_3)(char *); + int (*__pyx_t_4)(char *, PyObject *); + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1095 + * + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + */ + __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; + __pyx_v_to_object_func = __pyx_t_3; + + /* "View.MemoryView":1096 + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< + * else: + * to_object_func = NULL + */ + __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; + __pyx_v_to_dtype_func = __pyx_t_4; + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1098 + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + * to_object_func = NULL # <<<<<<<<<<<<<< + * to_dtype_func = NULL + * + */ + /*else*/ { + __pyx_v_to_object_func = NULL; + + /* "View.MemoryView":1099 + * else: + * to_object_func = NULL + * to_dtype_func = NULL # <<<<<<<<<<<<<< + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + */ + __pyx_v_to_dtype_func = NULL; + } + __pyx_L3:; + + /* "View.MemoryView":1101 + * to_dtype_func = NULL + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< + * to_object_func, to_dtype_func, + * memview.dtype_is_object) + */ + __Pyx_XDECREF(__pyx_r); + + /* "View.MemoryView":1103 + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + * to_object_func, to_dtype_func, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + +static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { + Py_ssize_t __pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + __pyx_t_1 = ((__pyx_v_arg < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1111 + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: + * return -arg # <<<<<<<<<<<<<< + * else: + * return arg + */ + __pyx_r = (-__pyx_v_arg); + goto __pyx_L0; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + } + + /* "View.MemoryView":1113 + * return -arg + * else: + * return arg # <<<<<<<<<<<<<< + * + * @cname('__pyx_get_best_slice_order') + */ + /*else*/ { + __pyx_r = __pyx_v_arg; + goto __pyx_L0; + } + + /* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + +static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { + int __pyx_v_i; + Py_ssize_t __pyx_v_c_stride; + Py_ssize_t __pyx_v_f_stride; + char __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1121 + * """ + * cdef int i + * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< + * cdef Py_ssize_t f_stride = 0 + * + */ + __pyx_v_c_stride = 0; + + /* "View.MemoryView":1122 + * cdef int i + * cdef Py_ssize_t c_stride = 0 + * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_f_stride = 0; + + /* "View.MemoryView":1124 + * cdef Py_ssize_t f_stride = 0 + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1126 + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1127 + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + goto __pyx_L4_break; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L4_break:; + + /* "View.MemoryView":1129 + * break + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + */ + __pyx_t_1 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_1; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1131 + * for i in range(ndim): + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1132 + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + */ + goto __pyx_L7_break; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L7_break:; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1135 + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + * return 'C' # <<<<<<<<<<<<<< + * else: + * return 'F' + */ + __pyx_r = 'C'; + goto __pyx_L0; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + } + + /* "View.MemoryView":1137 + * return 'C' + * else: + * return 'F' # <<<<<<<<<<<<<< + * + * @cython.cdivision(True) + */ + /*else*/ { + __pyx_r = 'F'; + goto __pyx_L0; + } + + /* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + +static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; + Py_ssize_t __pyx_v_dst_extent; + Py_ssize_t __pyx_v_src_stride; + Py_ssize_t __pyx_v_dst_stride; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + + /* "View.MemoryView":1147 + * + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + */ + __pyx_v_src_extent = (__pyx_v_src_shape[0]); + + /* "View.MemoryView":1148 + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] + */ + __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); + + /* "View.MemoryView":1149 + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + */ + __pyx_v_src_stride = (__pyx_v_src_strides[0]); + + /* "View.MemoryView":1150 + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + + /* "View.MemoryView":1154 + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + */ + __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); + if (__pyx_t_2) { + __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); + } + __pyx_t_3 = (__pyx_t_2 != 0); + __pyx_t_1 = __pyx_t_3; + __pyx_L5_bool_binop_done:; + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + if (__pyx_t_1) { + + /* "View.MemoryView":1155 + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent))); + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1157 + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __pyx_t_5 = __pyx_t_4; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1158 + * else: + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< + * src_data += src_stride + * dst_data += dst_stride + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize)); + + /* "View.MemoryView":1159 + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * else: + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1160 + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L4:; + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1162 + * dst_data += dst_stride + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * _copy_strided_to_strided(src_data, src_strides + 1, + * dst_data, dst_strides + 1, + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __pyx_t_5 = __pyx_t_4; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1163 + * else: + * for i in range(dst_extent): + * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< + * dst_data, dst_strides + 1, + * src_shape + 1, dst_shape + 1, + */ + _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); + + /* "View.MemoryView":1167 + * src_shape + 1, dst_shape + 1, + * ndim - 1, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1168 + * ndim - 1, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + + /* function exit code */ +} + +/* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + +static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + + /* "View.MemoryView":1173 + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< + * src.shape, dst.shape, ndim, itemsize) + * + */ + _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_size; + Py_ssize_t __pyx_r; + Py_ssize_t __pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + + /* "View.MemoryView":1179 + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<< + * + * for shape in src.shape[:ndim]: + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_size = __pyx_t_1; + + /* "View.MemoryView":1181 + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + * + * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<< + * size *= shape + * + */ + __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim); + for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_shape = (__pyx_t_2[0]); + + /* "View.MemoryView":1182 + * + * for shape in src.shape[:ndim]: + * size *= shape # <<<<<<<<<<<<<< + * + * return size + */ + __pyx_v_size = (__pyx_v_size * __pyx_v_shape); + } + + /* "View.MemoryView":1184 + * size *= shape + * + * return size # <<<<<<<<<<<<<< + * + * @cname('__pyx_fill_contig_strides_array') + */ + __pyx_r = __pyx_v_size; + goto __pyx_L0; + + /* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { + int __pyx_v_idx; + Py_ssize_t __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + __pyx_t_1 = ((__pyx_v_order == 'F') != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1197 + * + * if order == 'F': + * for idx in range(ndim): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + __pyx_t_2 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_idx = __pyx_t_4; + + /* "View.MemoryView":1198 + * if order == 'F': + * for idx in range(ndim): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * else: + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1199 + * for idx in range(ndim): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * else: + * for idx in range(ndim - 1, -1, -1): + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1201 + * stride *= shape[idx] + * else: + * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + /*else*/ { + for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { + __pyx_v_idx = __pyx_t_2; + + /* "View.MemoryView":1202 + * else: + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1203 + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * + * return stride + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + } + __pyx_L3:; + + /* "View.MemoryView":1205 + * stride *= shape[idx] + * + * return stride # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_data_to_temp') + */ + __pyx_r = __pyx_v_stride; + goto __pyx_L0; + + /* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { + int __pyx_v_i; + void *__pyx_v_result; + size_t __pyx_v_itemsize; + size_t __pyx_v_size; + void *__pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + struct __pyx_memoryview_obj *__pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1219 + * cdef void *result + * + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef size_t size = slice_get_size(src, ndim) + * + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1220 + * + * cdef size_t itemsize = src.memview.view.itemsize + * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< + * + * result = malloc(size) + */ + __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); + + /* "View.MemoryView":1222 + * cdef size_t size = slice_get_size(src, ndim) + * + * result = malloc(size) # <<<<<<<<<<<<<< + * if not result: + * _err(MemoryError, NULL) + */ + __pyx_v_result = malloc(__pyx_v_size); + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1224 + * result = malloc(size) + * if not result: + * _err(MemoryError, NULL) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1224, __pyx_L1_error) + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + } + + /* "View.MemoryView":1227 + * + * + * tmpslice.data = result # <<<<<<<<<<<<<< + * tmpslice.memview = src.memview + * for i in range(ndim): + */ + __pyx_v_tmpslice->data = ((char *)__pyx_v_result); + + /* "View.MemoryView":1228 + * + * tmpslice.data = result + * tmpslice.memview = src.memview # <<<<<<<<<<<<<< + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + */ + __pyx_t_4 = __pyx_v_src->memview; + __pyx_v_tmpslice->memview = __pyx_t_4; + + /* "View.MemoryView":1229 + * tmpslice.data = result + * tmpslice.memview = src.memview + * for i in range(ndim): # <<<<<<<<<<<<<< + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1230 + * tmpslice.memview = src.memview + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< + * tmpslice.suboffsets[i] = -1 + * + */ + (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); + + /* "View.MemoryView":1231 + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, + */ + (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1233 + * tmpslice.suboffsets[i] = -1 + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, # <<<<<<<<<<<<<< + * ndim, order) + * + */ + (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order)); + + /* "View.MemoryView":1237 + * + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1239 + * for i in range(ndim): + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< + * + * if slice_is_contig(src[0], order, ndim): + */ + (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + } + } + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1242 + * + * if slice_is_contig(src[0], order, ndim): + * memcpy(result, src.data, size) # <<<<<<<<<<<<<< + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + */ + (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size)); + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":1244 + * memcpy(result, src.data, size) + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< + * + * return result + */ + /*else*/ { + copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); + } + __pyx_L9:; + + /* "View.MemoryView":1246 + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = NULL; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + +static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_extents", 0); + + /* "View.MemoryView":1254 + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + * (i, extent1, extent2)) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err_dim') + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":1253 + * cdef int _err_extents(int i, Py_ssize_t extent1, + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % # <<<<<<<<<<<<<< + * (i, extent1, extent2)) + * + */ + __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(1, 1253, __pyx_L1_error) + + /* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + + /* 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("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + +static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_dim", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1258 + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: + * raise error(msg.decode('ascii') % dim) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err') + */ + __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1258, __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_INCREF(__pyx_v_error); + __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && 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_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 1258, __pyx_L1_error) + + /* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + + /* 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("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + +static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) { + 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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + __pyx_t_1 = ((__pyx_v_msg != NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":1263 + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: + * raise error(msg.decode('ascii')) # <<<<<<<<<<<<<< + * else: + * raise error + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_error); + __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 1263, __pyx_L1_error) + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + } + + /* "View.MemoryView":1265 + * raise error(msg.decode('ascii')) + * else: + * raise error # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_contents') + */ + /*else*/ { + __Pyx_Raise(__pyx_v_error, 0, 0, 0); + __PYX_ERR(1, 1265, __pyx_L1_error) + } + + /* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + + /* 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("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { + void *__pyx_v_tmpdata; + size_t __pyx_v_itemsize; + int __pyx_v_i; + char __pyx_v_order; + int __pyx_v_broadcasting; + int __pyx_v_direct_copy; + __Pyx_memviewslice __pyx_v_tmp; + int __pyx_v_ndim; + int __pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + void *__pyx_t_7; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1276 + * Check for overlapping memory and verify the shapes. + * """ + * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + */ + __pyx_v_tmpdata = NULL; + + /* "View.MemoryView":1277 + * """ + * cdef void *tmpdata = NULL + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + */ + __pyx_t_1 = __pyx_v_src.memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1279 + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< + * cdef bint broadcasting = False + * cdef bint direct_copy = False + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); + + /* "View.MemoryView":1280 + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False # <<<<<<<<<<<<<< + * cdef bint direct_copy = False + * cdef __Pyx_memviewslice tmp + */ + __pyx_v_broadcasting = 0; + + /* "View.MemoryView":1281 + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False + * cdef bint direct_copy = False # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice tmp + * + */ + __pyx_v_direct_copy = 0; + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1285 + * + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1287 + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< + * + * cdef int ndim = max(src_ndim, dst_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + } + __pyx_L3:; + + /* "View.MemoryView":1289 + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + __pyx_t_3 = __pyx_v_dst_ndim; + __pyx_t_4 = __pyx_v_src_ndim; + if (((__pyx_t_3 > __pyx_t_4) != 0)) { + __pyx_t_5 = __pyx_t_3; + } else { + __pyx_t_5 = __pyx_t_4; + } + __pyx_v_ndim = __pyx_t_5; + + /* "View.MemoryView":1291 + * cdef int ndim = max(src_ndim, dst_ndim) + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + */ + __pyx_t_5 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_5; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1294 + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + * broadcasting = True # <<<<<<<<<<<<<< + * src.strides[i] = 0 + * else: + */ + __pyx_v_broadcasting = 1; + + /* "View.MemoryView":1295 + * if src.shape[i] == 1: + * broadcasting = True + * src.strides[i] = 0 # <<<<<<<<<<<<<< + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) + */ + (__pyx_v_src.strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + goto __pyx_L7; + } + + /* "View.MemoryView":1297 + * src.strides[i] = 0 + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< + * + * if src.suboffsets[i] >= 0: + */ + /*else*/ { + __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + } + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1300 + * + * if src.suboffsets[i] >= 0: + * _err_dim(ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< + * + * if slices_overlap(&src, &dst, ndim, itemsize): + */ + __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1300, __pyx_L1_error) + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + } + } + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1305 + * + * if not slice_is_contig(src, order, ndim): + * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + } + + /* "View.MemoryView":1307 + * order = get_best_order(&dst, ndim) + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< + * src = tmp + * + */ + __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1307, __pyx_L1_error) + __pyx_v_tmpdata = __pyx_t_7; + + /* "View.MemoryView":1308 + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + * src = tmp # <<<<<<<<<<<<<< + * + * if not broadcasting: + */ + __pyx_v_src = __pyx_v_tmp; + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1314 + * + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<< + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim); + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + goto __pyx_L12; + } + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1316 + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<< + * + * if direct_copy: + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim); + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + } + __pyx_L12:; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_2 = (__pyx_v_direct_copy != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1320 + * if direct_copy: + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1321 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + */ + (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim))); + + /* "View.MemoryView":1322 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * free(tmpdata) + * return 0 + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1323 + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1324 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * if order == 'F' == get_best_order(&dst, ndim): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = (__pyx_v_order == 'F'); + if (__pyx_t_2) { + __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); + } + __pyx_t_8 = (__pyx_t_2 != 0); + if (__pyx_t_8) { + + /* "View.MemoryView":1329 + * + * + * transpose_memslice(&src) # <<<<<<<<<<<<<< + * transpose_memslice(&dst) + * + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1329, __pyx_L1_error) + + /* "View.MemoryView":1330 + * + * transpose_memslice(&src) + * transpose_memslice(&dst) # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1330, __pyx_L1_error) + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1332 + * transpose_memslice(&dst) + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1333 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + */ + copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1334 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * free(tmpdata) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1336 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1337 + * + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_broadcast_leading') + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) { + int __pyx_v_i; + int __pyx_v_offset; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + + /* "View.MemoryView":1344 + * int ndim_other) nogil: + * cdef int i + * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); + + /* "View.MemoryView":1346 + * cdef int offset = ndim_other - ndim + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1347 + * + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<< + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + */ + (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]); + + /* "View.MemoryView":1348 + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<< + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + */ + (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1349 + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<< + * + * for i in range(offset): + */ + (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]); + } + + /* "View.MemoryView":1351 + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + * for i in range(offset): # <<<<<<<<<<<<<< + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + */ + __pyx_t_1 = __pyx_v_offset; + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1352 + * + * for i in range(offset): + * mslice.shape[i] = 1 # <<<<<<<<<<<<<< + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 + */ + (__pyx_v_mslice->shape[__pyx_v_i]) = 1; + + /* "View.MemoryView":1353 + * for i in range(offset): + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<< + * mslice.suboffsets[i] = -1 + * + */ + (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]); + + /* "View.MemoryView":1354 + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { + int __pyx_t_1; + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + __pyx_t_1 = (__pyx_v_dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1367 + * + * if dtype_is_object: + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, # <<<<<<<<<<<<<< + * dst.strides, ndim, inc) + * + */ + __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + } + + /* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + + /* function exit code */ +} + +/* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + __Pyx_RefNannyDeclarations + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); + + /* "View.MemoryView":1374 + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif +} + +/* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + +static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); + + /* "View.MemoryView":1381 + * cdef Py_ssize_t i + * + * for i in range(shape[0]): # <<<<<<<<<<<<<< + * if ndim == 1: + * if inc: + */ + __pyx_t_1 = (__pyx_v_shape[0]); + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + __pyx_t_4 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + __pyx_t_4 = (__pyx_v_inc != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1384 + * if ndim == 1: + * if inc: + * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * Py_DECREF(( data)[0]) + */ + Py_INCREF((((PyObject **)__pyx_v_data)[0])); + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":1386 + * Py_INCREF(( data)[0]) + * else: + * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + */ + /*else*/ { + Py_DECREF((((PyObject **)__pyx_v_data)[0])); + } + __pyx_L6:; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + goto __pyx_L5; + } + + /* "View.MemoryView":1388 + * Py_DECREF(( data)[0]) + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, inc) + * + */ + /*else*/ { + + /* "View.MemoryView":1389 + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + * ndim - 1, inc) # <<<<<<<<<<<<<< + * + * data += strides[0] + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); + } + __pyx_L5:; + + /* "View.MemoryView":1391 + * ndim - 1, inc) + * + * data += strides[0] # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0])); + } + + /* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { + + /* "View.MemoryView":1400 + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1401 + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, # <<<<<<<<<<<<<< + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1403 + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + +static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_extent; + int __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + + /* "View.MemoryView":1411 + * size_t itemsize, void *item) nogil: + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t extent = shape[0] + * + */ + __pyx_v_stride = (__pyx_v_strides[0]); + + /* "View.MemoryView":1412 + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] + * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_extent = (__pyx_v_shape[0]); + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1415 + * + * if ndim == 1: + * for i in range(extent): # <<<<<<<<<<<<<< + * memcpy(data, item, itemsize) + * data += stride + */ + __pyx_t_2 = __pyx_v_extent; + __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; + + /* "View.MemoryView":1416 + * if ndim == 1: + * for i in range(extent): + * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< + * data += stride + * else: + */ + (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize)); + + /* "View.MemoryView":1417 + * for i in range(extent): + * memcpy(data, item, itemsize) + * data += stride # <<<<<<<<<<<<<< + * else: + * for i in range(extent): + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1419 + * data += stride + * else: + * for i in range(extent): # <<<<<<<<<<<<<< + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + */ + /*else*/ { + __pyx_t_2 = __pyx_v_extent; + __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; + + /* "View.MemoryView":1420 + * else: + * for i in range(extent): + * _slice_assign_scalar(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, itemsize, item) + * data += stride + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1422 + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + * data += stride # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + + /* function exit code */ +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__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_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_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; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb068931) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + */ + __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_Enum(__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_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __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_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[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) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->name); + __Pyx_DECREF(__pyx_v___pyx_result->name); + __pyx_v___pyx_result->name = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[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_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = ((__pyx_t_3 > 1) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< + */ + __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 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 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_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__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_array __pyx_vtable_array; + +static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_array_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_array_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_array; + p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_format = ((PyObject*)Py_None); Py_INCREF(Py_None); + if (unlikely(__pyx_array___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_array(PyObject *o) { + struct __pyx_array_obj *p = (struct __pyx_array_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_array___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->mode); + Py_CLEAR(p->_format); + (*Py_TYPE(o)->tp_free)(o); +} +static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_array___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) { + PyObject *v = __Pyx_PyObject_GenericGetAttr(o, n); + if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + v = __pyx_array___getattr__(o, n); + } + return v; +} + +static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(o); +} + +static PyMethodDef __pyx_methods_array[] = { + {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_array[] = { + {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_array = { + __pyx_array___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_array, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_array = { + __pyx_array___len__, /*mp_length*/ + __pyx_array___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_array, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_array = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_array_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_array = { + PyVarObject_HEAD_INIT(0, 0) + "dens_profs.dens_profs_algos.array", /*tp_name*/ + sizeof(struct __pyx_array_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_array, /*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*/ + &__pyx_tp_as_sequence_array, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_array, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + __pyx_tp_getattro_array, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_array, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_array, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_array, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_array, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_MemviewEnum_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_MemviewEnum_obj *)o); + p->name = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_Enum(PyObject *o) { + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->name); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + if (p->name) { + e = (*v)(p->name, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_Enum(PyObject *o) { + PyObject* tmp; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + tmp = ((PyObject*)p->name); + p->name = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_Enum[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_MemviewEnum = { + PyVarObject_HEAD_INIT(0, 0) + "dens_profs.dens_profs_algos.Enum", /*tp_name*/ + sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_Enum, /*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 + __pyx_MemviewEnum___repr__, /*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*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_Enum, /*tp_traverse*/ + __pyx_tp_clear_Enum, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_Enum, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_MemviewEnum___init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_Enum, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview; + +static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryview_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryview_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_memoryview; + p->obj = Py_None; Py_INCREF(Py_None); + p->_size = Py_None; Py_INCREF(Py_None); + p->_array_interface = Py_None; Py_INCREF(Py_None); + p->view.obj = NULL; + if (unlikely(__pyx_memoryview___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_memoryview(PyObject *o) { + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryview___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->obj); + Py_CLEAR(p->_size); + Py_CLEAR(p->_array_interface); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + if (p->obj) { + e = (*v)(p->obj, a); if (e) return e; + } + if (p->_size) { + e = (*v)(p->_size, a); if (e) return e; + } + if (p->_array_interface) { + e = (*v)(p->_array_interface, a); if (e) return e; + } + if (p->view.obj) { + e = (*v)(p->view.obj, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_memoryview(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + tmp = ((PyObject*)p->obj); + p->obj = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_size); + p->_size = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_array_interface); + p->_array_interface = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + Py_CLEAR(p->view.obj); + return 0; +} +static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_memoryview___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o); +} + +static PyMethodDef __pyx_methods_memoryview[] = { + {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0}, + {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0}, + {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0}, + {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_memoryview[] = { + {(char *)"T", __pyx_getprop___pyx_memoryview_T, 0, (char *)0, 0}, + {(char *)"base", __pyx_getprop___pyx_memoryview_base, 0, (char *)0, 0}, + {(char *)"shape", __pyx_getprop___pyx_memoryview_shape, 0, (char *)0, 0}, + {(char *)"strides", __pyx_getprop___pyx_memoryview_strides, 0, (char *)0, 0}, + {(char *)"suboffsets", __pyx_getprop___pyx_memoryview_suboffsets, 0, (char *)0, 0}, + {(char *)"ndim", __pyx_getprop___pyx_memoryview_ndim, 0, (char *)0, 0}, + {(char *)"itemsize", __pyx_getprop___pyx_memoryview_itemsize, 0, (char *)0, 0}, + {(char *)"nbytes", __pyx_getprop___pyx_memoryview_nbytes, 0, (char *)0, 0}, + {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_memoryview = { + __pyx_memoryview___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_memoryview, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_memoryview = { + __pyx_memoryview___len__, /*mp_length*/ + __pyx_memoryview___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_memoryview, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_memoryview = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_memoryview_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_memoryview = { + PyVarObject_HEAD_INIT(0, 0) + "dens_profs.dens_profs_algos.memoryview", /*tp_name*/ + sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_memoryview, /*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 + __pyx_memoryview___repr__, /*tp_repr*/ + 0, /*tp_as_number*/ + &__pyx_tp_as_sequence_memoryview, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_memoryview, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + __pyx_memoryview___str__, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_memoryview, /*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*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_memoryview, /*tp_traverse*/ + __pyx_tp_clear_memoryview, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_memoryview, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_memoryview, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_memoryview, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice; + +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryviewslice_obj *p; + PyObject *o = __pyx_tp_new_memoryview(t, a, k); + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryviewslice_obj *)o); + p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice; + p->from_object = Py_None; Py_INCREF(Py_None); + p->from_slice.memview = NULL; + return o; +} + +static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryviewslice___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->from_object); + PyObject_GC_Track(o); + __pyx_tp_dealloc_memoryview(o); +} + +static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + e = __pyx_tp_traverse_memoryview(o, v, a); if (e) return e; + if (p->from_object) { + e = (*v)(p->from_object, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear__memoryviewslice(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + __pyx_tp_clear_memoryview(o); + tmp = ((PyObject*)p->from_object); + p->from_object = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + __PYX_XDEC_MEMVIEW(&p->from_slice, 1); + return 0; +} + +static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o); +} + +static PyMethodDef __pyx_methods__memoryviewslice[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = { + {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_memoryviewslice = { + PyVarObject_HEAD_INIT(0, 0) + "dens_profs.dens_profs_algos._memoryviewslice", /*tp_name*/ + sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc__memoryviewslice, /*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 + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___repr__, /*tp_repr*/ + #else + 0, /*tp_repr*/ + #endif + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___str__, /*tp_str*/ + #else + 0, /*tp_str*/ + #endif + 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*/ + "Internal class for passing memoryview slices to Python", /*tp_doc*/ + __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/ + __pyx_tp_clear__memoryviewslice, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods__memoryviewslice, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets__memoryviewslice, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new__memoryviewslice, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_dens_profs_algos(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_dens_profs_algos}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "dens_profs_algos", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 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_s_CENTER, __pyx_k_CENTER, sizeof(__pyx_k_CENTER), 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_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0}, + {&__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_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_k_Incompatible_checksums_s_vs_0xb0, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb0), 0, 0, 1, 0}, + {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, + {&__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_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0}, + {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0}, + {&__pyx_n_s_L_BOX, __pyx_k_L_BOX, sizeof(__pyx_k_L_BOX), 0, 0, 1, 1}, + {&__pyx_n_s_MIN_NUMBER_PTCS, __pyx_k_MIN_NUMBER_PTCS, sizeof(__pyx_k_MIN_NUMBER_PTCS), 0, 0, 1, 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_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, + {&__pyx_kp_s_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, 0, 1, 0}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_ROverR200, __pyx_k_ROverR200, sizeof(__pyx_k_ROverR200), 0, 0, 1, 1}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 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_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_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1}, + {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_b, __pyx_k_b, sizeof(__pyx_k_b), 0, 0, 1, 1}, + {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, + {&__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_calcDensProfsEllDirectBinning, __pyx_k_calcDensProfsEllDirectBinning, sizeof(__pyx_k_calcDensProfsEllDirectBinning), 0, 0, 1, 1}, + {&__pyx_n_s_calcDensProfsKernelBased, __pyx_k_calcDensProfsKernelBased, sizeof(__pyx_k_calcDensProfsKernelBased), 0, 0, 1, 1}, + {&__pyx_n_s_calcDensProfsSphDirectBinning, __pyx_k_calcDensProfsSphDirectBinning, sizeof(__pyx_k_calcDensProfsSphDirectBinning), 0, 0, 1, 1}, + {&__pyx_n_s_calcMassesCenters, __pyx_k_calcMassesCenters, sizeof(__pyx_k_calcMassesCenters), 0, 0, 1, 1}, + {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 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_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_dens_profs_dens_profs_algos, __pyx_k_dens_profs_dens_profs_algos, sizeof(__pyx_k_dens_profs_dens_profs_algos), 0, 0, 1, 1}, + {&__pyx_kp_s_dens_profs_dens_profs_algos_pyx, __pyx_k_dens_profs_dens_profs_algos_pyx, sizeof(__pyx_k_dens_profs_dens_profs_algos_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 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_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 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_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 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_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_idx_cat, __pyx_k_idx_cat, sizeof(__pyx_k_idx_cat), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_inter, __pyx_k_inter, sizeof(__pyx_k_inter), 0, 0, 1, 1}, + {&__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_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_major, __pyx_k_major, sizeof(__pyx_k_major), 0, 0, 1, 1}, + {&__pyx_n_s_masses, __pyx_k_masses, sizeof(__pyx_k_masses), 0, 0, 1, 1}, + {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, + {&__pyx_n_s_minor, __pyx_k_minor, sizeof(__pyx_k_minor), 0, 0, 1, 1}, + {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 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_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_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, + {&__pyx_n_s_obj_keep, __pyx_k_obj_keep, sizeof(__pyx_k_obj_keep), 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_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__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_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_r200s, __pyx_k_r200s, sizeof(__pyx_k_r200s), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__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_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_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, + {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 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}, + {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 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_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_xyz, __pyx_k_xyz, sizeof(__pyx_k_xyz), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 133, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 148, __pyx_L1_error) + __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 151, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(1, 180, __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_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(1, 404, __pyx_L1_error) + __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(1, 613, __pyx_L1_error) + __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(1, 832, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(1, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __pyx_tuple__12 = PyTuple_New(1); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_INCREF(__pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_int_neg_1); + PyTuple_SET_ITEM(__pyx_tuple__12, 0, __pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_tuple__12); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_GIVEREF(__pyx_tuple__13); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_slice__15 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__15)) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__15); + __Pyx_GIVEREF(__pyx_slice__15); + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(1, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__16); + __Pyx_GIVEREF(__pyx_tuple__16); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__18); + __Pyx_GIVEREF(__pyx_tuple__18); + + /* "dens_profs/dens_profs_algos.pyx":10 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMassesCenters(float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculate total mass and centers of objects + * + */ + __pyx_tuple__19 = PyTuple_Pack(6, __pyx_n_s_xyz, __pyx_n_s_masses, __pyx_n_s_idx_cat, __pyx_n_s_MIN_NUMBER_PTCS, __pyx_n_s_L_BOX, __pyx_n_s_CENTER); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__19); + __Pyx_GIVEREF(__pyx_tuple__19); + __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dens_profs_dens_profs_algos_pyx, __pyx_n_s_calcMassesCenters, 10, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 10, __pyx_L1_error) + + /* "dens_profs/dens_profs_algos.pyx":32 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsSphDirectBinning(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates spherical shell-based density profiles for objects defined by indices found in `idx_cat` + * + */ + __pyx_tuple__21 = PyTuple_Pack(9, __pyx_n_s_xyz, __pyx_n_s_obj_keep, __pyx_n_s_masses, __pyx_n_s_r200s, __pyx_n_s_ROverR200, __pyx_n_s_idx_cat, __pyx_n_s_MIN_NUMBER_PTCS, __pyx_n_s_L_BOX, __pyx_n_s_CENTER); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__21); + __Pyx_GIVEREF(__pyx_tuple__21); + __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(9, 0, 9, 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_dens_profs_dens_profs_algos_pyx, __pyx_n_s_calcDensProfsSphDirectBinning, 32, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 32, __pyx_L1_error) + + /* "dens_profs/dens_profs_algos.pyx":65 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsEllDirectBinning(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, float[:,:] a, float[:,:] b, float[:,:] c, float[:,:,:] major, float[:,:,:] inter, float[:,:,:] minor, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates ellipsoidal shell-based density profiles for objects defined by indices found in `idx_cat` + * + */ + __pyx_tuple__23 = PyTuple_Pack(15, __pyx_n_s_xyz, __pyx_n_s_obj_keep, __pyx_n_s_masses, __pyx_n_s_r200s, __pyx_n_s_ROverR200, __pyx_n_s_a, __pyx_n_s_b, __pyx_n_s_c, __pyx_n_s_major, __pyx_n_s_inter, __pyx_n_s_minor, __pyx_n_s_idx_cat, __pyx_n_s_MIN_NUMBER_PTCS, __pyx_n_s_L_BOX, __pyx_n_s_CENTER); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(15, 0, 15, 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_dens_profs_dens_profs_algos_pyx, __pyx_n_s_calcDensProfsEllDirectBinning, 65, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 65, __pyx_L1_error) + + /* "dens_profs/dens_profs_algos.pyx":110 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsKernelBased(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates kernel-based density profiles for objects defined by indices found in `idx_cat` + * + */ + __pyx_tuple__25 = PyTuple_Pack(9, __pyx_n_s_xyz, __pyx_n_s_obj_keep, __pyx_n_s_masses, __pyx_n_s_r200s, __pyx_n_s_ROverR200, __pyx_n_s_idx_cat, __pyx_n_s_MIN_NUMBER_PTCS, __pyx_n_s_L_BOX, __pyx_n_s_CENTER); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); + __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(9, 0, 9, 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_dens_profs_dens_profs_algos_pyx, __pyx_n_s_calcDensProfsKernelBased, 110, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 110, __pyx_L1_error) + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(1, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(1, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__28); + __Pyx_GIVEREF(__pyx_tuple__28); + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(1, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__29); + __Pyx_GIVEREF(__pyx_tuple__29); + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(1, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__30); + __Pyx_GIVEREF(__pyx_tuple__30); + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(1, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__32 = 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__32)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_184977713 = PyInt_FromLong(184977713L); if (unlikely(!__pyx_int_184977713)) __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:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + generic = Py_None; Py_INCREF(Py_None); + strided = Py_None; Py_INCREF(Py_None); + indirect = Py_None; Py_INCREF(Py_None); + contiguous = Py_None; Py_INCREF(Py_None); + indirect_contiguous = Py_None; Py_INCREF(Py_None); + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __pyx_vtabptr_array = &__pyx_vtable_array; + __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview; + if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_array.tp_print = 0; + #endif + if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + __pyx_array_type = &__pyx_type___pyx_array; + if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_MemviewEnum.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error) + __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum; + __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview; + __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer; + __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice; + __pyx_vtable_memoryview.setitem_slice_assignment = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_slice_assignment; + __pyx_vtable_memoryview.setitem_slice_assign_scalar = (PyObject *(*)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_setitem_slice_assign_scalar; + __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed; + __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object; + __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object; + if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryview.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + __pyx_memoryview_type = &__pyx_type___pyx_memoryview; + __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice; + __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview; + __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object; + __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object; + __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type; + if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryviewslice.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initdens_profs_algos(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initdens_profs_algos(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_dens_profs_algos(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_dens_profs_algos(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_dens_profs_algos(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + static PyThread_type_lock __pyx_t_2[8]; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'dens_profs_algos' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_dens_profs_algos(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("dens_profs_algos", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_dens_profs__dens_profs_algos) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "dens_profs.dens_profs_algos")) { + if (unlikely(PyDict_SetItemString(modules, "dens_profs.dens_profs_algos", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "dens_profs/dens_profs_algos.pyx":5 + * # -*- coding: utf-8 -*- + * + * import numpy as np # <<<<<<<<<<<<<< + * cimport cython + * + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dens_profs/dens_profs_algos.pyx":10 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMassesCenters(float[:,:] xyz, float[:] masses, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculate total mass and centers of objects + * + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_10dens_profs_16dens_profs_algos_1calcMassesCenters, 0, __pyx_n_s_calcMassesCenters, NULL, __pyx_n_s_dens_profs_dens_profs_algos, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_calcMassesCenters, __pyx_t_1) < 0) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dens_profs/dens_profs_algos.pyx":32 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsSphDirectBinning(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates spherical shell-based density profiles for objects defined by indices found in `idx_cat` + * + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_10dens_profs_16dens_profs_algos_3calcDensProfsSphDirectBinning, 0, __pyx_n_s_calcDensProfsSphDirectBinning, NULL, __pyx_n_s_dens_profs_dens_profs_algos, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_calcDensProfsSphDirectBinning, __pyx_t_1) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dens_profs/dens_profs_algos.pyx":65 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsEllDirectBinning(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, float[:,:] a, float[:,:] b, float[:,:] c, float[:,:,:] major, float[:,:,:] inter, float[:,:,:] minor, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates ellipsoidal shell-based density profiles for objects defined by indices found in `idx_cat` + * + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_10dens_profs_16dens_profs_algos_5calcDensProfsEllDirectBinning, 0, __pyx_n_s_calcDensProfsEllDirectBinning, NULL, __pyx_n_s_dens_profs_dens_profs_algos, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_calcDensProfsEllDirectBinning, __pyx_t_1) < 0) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dens_profs/dens_profs_algos.pyx":110 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcDensProfsKernelBased(float[:,:] xyz, int[:] obj_keep, float[:] masses, float[:] r200s, float[:] ROverR200, idx_cat, int MIN_NUMBER_PTCS, float L_BOX, str CENTER): # <<<<<<<<<<<<<< + * """ Calculates kernel-based density profiles for objects defined by indices found in `idx_cat` + * + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_10dens_profs_16dens_profs_algos_7calcDensProfsKernelBased, 0, __pyx_n_s_calcDensProfsKernelBased, NULL, __pyx_n_s_dens_profs_dens_profs_algos, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_calcDensProfsKernelBased, __pyx_t_1) < 0) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dens_profs/dens_profs_algos.pyx":1 + * #cython: language_level=3 # <<<<<<<<<<<<<< + * #!/usr/bin/env python3 + * # -*- coding: utf-8 -*- + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "View.MemoryView":209 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * def __dealloc__(array self): + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 209, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_array_type); + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(generic); + __Pyx_DECREF_SET(generic, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(strided); + __Pyx_DECREF_SET(strided, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(indirect); + __Pyx_DECREF_SET(indirect, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(contiguous); + __Pyx_DECREF_SET(contiguous, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(indirect_contiguous); + __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":316 + * + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<< + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ + * PyThread_allocate_lock(), + */ + __pyx_memoryview_thread_locks_used = 0; + + /* "View.MemoryView":317 + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<< + * PyThread_allocate_lock(), + * PyThread_allocate_lock(), + */ + __pyx_t_2[0] = PyThread_allocate_lock(); + __pyx_t_2[1] = PyThread_allocate_lock(); + __pyx_t_2[2] = PyThread_allocate_lock(); + __pyx_t_2[3] = PyThread_allocate_lock(); + __pyx_t_2[4] = PyThread_allocate_lock(); + __pyx_t_2[5] = PyThread_allocate_lock(); + __pyx_t_2[6] = PyThread_allocate_lock(); + __pyx_t_2[7] = PyThread_allocate_lock(); + memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_2, sizeof(__pyx_memoryview_thread_locks[0]) * (8)); + + /* "View.MemoryView":549 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_memoryview_type); + + /* "View.MemoryView":995 + * return self.from_object + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 995, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 995, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_memoryviewslice_type); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_1) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init dens_profs.dens_profs_algos", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init dens_profs.dens_profs_algos"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); + return 0; +} + +/* 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]; +#ifdef 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 *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 *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) +{ + int first_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) + return; + if (unlikely(__pyx_get_slice_count(memview) < 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + first_time = __pyx_add_acquisition_count(memview) == 0; + if (unlikely(first_time)) { + if (have_gil) { + Py_INCREF((PyObject *) memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_INCREF((PyObject *) memview); + PyGILState_Release(_gilstate); + } + } +} +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice, + int have_gil, int lineno) { + int last_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + memslice->memview = NULL; + return; + } + if (unlikely(__pyx_get_slice_count(memview) <= 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + last_time = __pyx_sub_acquisition_count(memview) == 1; + memslice->data = NULL; + if (unlikely(last_time)) { + if (have_gil) { + Py_CLEAR(memslice->memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_CLEAR(memslice->memview); + PyGILState_Release(_gilstate); + } + } else { + memslice->memview = NULL; + } +} + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* None */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { + Py_ssize_t q = a / b; + Py_ssize_t r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (!j) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; + if (likely(m && m->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { + Py_ssize_t l = m->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return m->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { + PyObject *runerr; + Py_ssize_t key_value; + PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; + if (unlikely(!(m && m->sq_item))) { + PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); + return NULL; + } + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { + PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; + if (likely(m && m->mp_subscript)) { + return m->mp_subscript(obj, key); + } + return __Pyx_PyObject_GetIndex(obj, key); +} +#endif + +/* decode_c_string */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, 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)) { + Py_ssize_t length; + if (unlikely((start < 0) | (stop < 0))) { + size_t slen = strlen(cstring); + if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, + "c-string too long to convert to Python"); + return NULL; + } + length = (Py_ssize_t) slen; + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + 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); + } +} + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; icurexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; + if (unlikely(PyTuple_Check(err))) + return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); +} +#endif + +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r = __Pyx_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* ExtTypeTest */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_type == NULL || exc_info->exc_type == 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 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + #endif + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + 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 + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type, *local_value, *local_tb; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #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 = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + 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 + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 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 + const digit* digits = ((PyLongObject*)op1)->ob_digit; + const Py_ssize_t size = Py_SIZE(op1); + if (likely(__Pyx_sst_abs(size) <= 1)) { + a = likely(size) ? digits[0] : 0; + if (size == -1) a = -a; + } else { + 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; + double a = PyFloat_AS_DOUBLE(op1); + 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 + +/* None */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +} + +/* None */ +static CYTHON_INLINE long __Pyx_div_long(long a, long b) { + long q = a / b; + long r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* 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 (unlikely(!r)) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, attr_name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(attr_name)); +#endif + 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 + +/* SetVTable */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable) { +#if PY_VERSION_HEX >= 0x02070000 + PyObject *ob = PyCapsule_New(vtable, 0, 0); +#else + PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); +#endif + if (!ob) + goto bad; + if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) + goto bad; + Py_DECREF(ob); + return 0; +bad: + Py_XDECREF(ob); + return -1; +} + +/* PyObjectGetAttrStrNoError */ +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +} + +/* SetupReduce */ +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStr(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_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#else + if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#endif +#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 + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#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; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#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_GetAttrStr(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()) + PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} + +/* FetchCommonType */ +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* fake_module; + PyTypeObject* cached_type = NULL; + fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); + if (!fake_module) return NULL; + Py_INCREF(fake_module); + cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); + if (cached_type) { + if (!PyType_Check((PyObject*)cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", + type->tp_name); + goto bad; + } + if (cached_type->tp_basicsize != type->tp_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + type->tp_name); + goto bad; + } + } else { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; + } +done: + Py_DECREF(fake_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} + +/* CythonFunctionShared */ +#include +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) +{ + if (unlikely(op->func_doc == NULL)) { + if (op->func.m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp = op->func_doc; + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + op->func_doc = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + if (unlikely(op->func_name == NULL)) { +#if PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp; +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + tmp = op->func_name; + Py_INCREF(value); + op->func_name = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp; +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + tmp = op->func_qualname; + Py_INCREF(value); + op->func_qualname = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) +{ + PyObject *self; + self = m->func_closure; + if (self == NULL) + self = Py_None; + Py_INCREF(self); + return self; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp; + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + tmp = op->func_dict; + Py_INCREF(value); + op->func_dict = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { + PyObject* tmp; + if (!value) { + value = Py_None; + } else if (value != Py_None && !PyTuple_Check(value)) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + Py_INCREF(value); + tmp = op->defaults_tuple; + op->defaults_tuple = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { + PyObject* result = op->defaults_tuple; + if (unlikely(!result)) { + if (op->defaults_getter) { + if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { + PyObject* tmp; + if (!value) { + value = Py_None; + } else if (value != Py_None && !PyDict_Check(value)) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + Py_INCREF(value); + tmp = op->defaults_kwdict; + op->defaults_kwdict = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { + PyObject* result = op->defaults_kwdict; + if (unlikely(!result)) { + if (op->defaults_getter) { + if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { + PyObject* tmp; + if (!value || value == Py_None) { + value = NULL; + } else if (!PyDict_Check(value)) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + tmp = op->func_annotations; + op->func_annotations = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { + PyObject* result = op->func_annotations; + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0}, + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromString(m->func.m_ml->ml_name); +#else + return PyString_FromString(m->func.m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + if (unlikely(op == NULL)) + return NULL; + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; + op->func.m_ml = ml; + op->func.m_self = (PyObject *) op; + Py_XINCREF(closure); + op->func_closure = closure; + Py_XINCREF(module); + op->func.m_module = module; + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; + op->func_classobj = NULL; + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); + Py_CLEAR(m->func.m_module); + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); + Py_CLEAR(m->func_classobj); + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + PyObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); + Py_VISIT(m->func.m_module); + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); + Py_VISIT(m->func_classobj); + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) +{ +#if PY_MAJOR_VERSION < 3 + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { + Py_INCREF(func); + return func; + } + if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { + if (type == NULL) + type = (PyObject *)(Py_TYPE(obj)); + return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type))); + } + if (obj == Py_None) + obj = NULL; +#endif + return __Pyx_PyMethod_New(func, obj, type); +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + Py_ssize_t size; + switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { + size = PyTuple_GET_SIZE(arg); + if (likely(size == 0)) + return (*meth)(self, NULL); + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { + size = PyTuple_GET_SIZE(arg); + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags in " + "__Pyx_CyFunction_Call. METH_OLDARGS is no " + "longer supported!"); + return NULL; + } + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + return __Pyx_CyFunction_CallMethod(func, ((PyCFunctionObject*)func)->m_self, arg, kw); +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; + argc = PyTuple_GET_SIZE(args); + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, + 0, + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_CyFunction_descr_get, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, +#endif +}; +static int __pyx_CyFunction_init(void) { + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + 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); + } + return op; +} + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + 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); + PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_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 ((0)) {} + view->obj = NULL; + Py_DECREF(obj); +} +#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]; + } + 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); + } + } + *out_start = start; + *out_end = end + itemsize; +} +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); +} + +/* Capsule */ +static CYTHON_INLINE PyObject * +__pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig) +{ + PyObject *cobj; +#if PY_VERSION_HEX >= 0x02070000 + cobj = PyCapsule_New(p, sig, NULL); +#else + cobj = PyCObject_FromVoidPtr(p, NULL); +#endif + return cobj; +} + +/* IsLittleEndian */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void) +{ + union { + uint32_t u32; + uint8_t u8[4]; + } S; + S.u32 = 0x01020304; + return S.u8[0] == 4; +} + +/* BufferFormatCheck */ +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + ctx->is_valid_array = 0; + ctx->struct_alignment = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t <= '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} +static int __Pyx_BufFmt_ExpectNumber(const char **ts) { + int number = __Pyx_BufFmt_ParseNumber(ts); + if (number == -1) + PyErr_Format(PyExc_ValueError,\ + "Does not understand character buffer dtype format string ('%c')", **ts); + return number; +} +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case '?': return "'bool'"; + case 'c': return "'char'"; + case 'b': return "'signed char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 's': case 'p': return "a string"; + case 0: return "end"; + default: return "unparseable format string"; + } +} +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +/* These are for computing the padding at the end of the struct to align + on the first member of the struct. This will probably the same as above, + but we don't have any guarantees. + */ +typedef struct { short x; char c; } __Pyx_pad_short; +typedef struct { int x; char c; } __Pyx_pad_int; +typedef struct { long x; char c; } __Pyx_pad_long; +typedef struct { float x; char c; } __Pyx_pad_float; +typedef struct { double x; char c; } __Pyx_pad_double; +typedef struct { long double x; char c; } __Pyx_pad_longdouble; +typedef struct { void *x; char c; } __Pyx_pad_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); + case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); + case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': + return 'H'; + case 'b': case 'h': case 'i': + case 'l': case 'q': case 's': case 'p': + return 'I'; + case '?': case 'B': case 'H': case 'I': case 'L': case 'Q': + return 'U'; + case 'f': case 'd': case 'g': + return (is_complex ? 'C' : 'R'); + case 'O': + return 'O'; + case 'P': + return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset, arraysize = 1; + if (ctx->enc_type == 0) return 0; + if (ctx->head->field->type->arraysize[0]) { + int i, ndim = 0; + if (ctx->enc_type == 's' || ctx->enc_type == 'p') { + ctx->is_valid_array = ctx->head->field->type->ndim == 1; + ndim = 1; + if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %zu", + ctx->head->field->type->arraysize[0], ctx->enc_count); + return -1; + } + } + if (!ctx->is_valid_array) { + PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", + ctx->head->field->type->ndim, ndim); + return -1; + } + for (i = 0; i < ctx->head->field->type->ndim; i++) { + arraysize *= ctx->head->field->type->arraysize[i]; + } + ctx->is_valid_array = 0; + ctx->enc_count = 1; + } + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + if (ctx->struct_alignment == 0) + ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, + ctx->is_complex); + } + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + if ((type->typegroup == 'H' || group == 'H') && type->size == size) { + } else { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + } + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + ctx->fmt_offset += size; + if (arraysize) + ctx->fmt_offset += (arraysize - 1) * size; + --ctx->enc_count; + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} +static PyObject * +__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) +{ + const char *ts = *tsp; + int i = 0, number, ndim; + ++ts; + if (ctx->new_count != 1) { + PyErr_SetString(PyExc_ValueError, + "Cannot handle repeated arrays in format string"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ndim = ctx->head->field->type->ndim; + while (*ts && *ts != ')') { + switch (*ts) { + case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; + default: break; + } + number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) + return PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + if (*ts != ',' && *ts != ')') + return PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + if (*ts == ',') ts++; + i++; + } + if (i != ndim) + return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return NULL; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return Py_None; +} +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case '\r': + case '\n': + ++ts; + break; + case '<': + if (!__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + size_t struct_alignment = ctx->struct_alignment; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + ctx->enc_count = 0; + ctx->struct_alignment = 0; + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + if (struct_alignment) ctx->struct_alignment = struct_alignment; + } + break; + case '}': + { + size_t alignment = ctx->struct_alignment; + ++ts; + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + if (alignment && ctx->fmt_offset % alignment) { + ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); + } + } + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } + CYTHON_FALLTHROUGH; + case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': case 'p': + if ((ctx->enc_type == *ts) && (got_Z == ctx->is_complex) && + (ctx->enc_packmode == ctx->new_packmode) && (!ctx->is_valid_array)) { + ctx->enc_count += ctx->new_count; + ctx->new_count = 1; + got_Z = 0; + ++ts; + break; + } + CYTHON_FALLTHROUGH; + case 's': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + case '(': + if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; + } + } + } +} + +/* 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; + } + } + if (a->ndim) { + for (i = 0; i < a->ndim; i++) + if (a->arraysize[i] != b->arraysize[i]) + return 0; + } + 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; + } + } + 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; + } + } + 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; + } + } + return 1; +fail: + return 0; +} +static int +__pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec) +{ + 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; + } + } + 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; + } + } + 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]; + } + } 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]; + } + } + 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 (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_dsds_float(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), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 2, + &__Pyx_TypeInfo_float, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_float(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; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_float, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* 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;\ + } + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_int(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; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_int, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsds_float(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), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 3, + &__Pyx_TypeInfo_float, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* 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; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* CIntFromPy */ + static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) { + const char neg_one = (char) ((char) 0 - (char) 1), const_zero = (char) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(char) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (char) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (char) 0; + case 1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0]) + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) { + return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) { + return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) >= 4 * PyLong_SHIFT) { + return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (char) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(char) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (char) 0; + case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(char, digit, +digits[0]) + case -2: + if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + } +#endif + if (sizeof(char) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + char val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (char) -1; + } + } else { + char val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (char) -1; + val = __Pyx_PyInt_As_char(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to char"); + return (char) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to char"); + return (char) -1; +} + +/* CheckBinaryVersion */ + static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + return PyErr_WarnEx(NULL, message, 1); + } + return 0; +} + +/* InitStrings */ + static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/cosmic_profiles/for_docs/dens_profs/dens_profs_algos.so b/cosmic_profiles/for_docs/dens_profs/dens_profs_algos.so new file mode 100755 index 0000000000000000000000000000000000000000..221392104cc2dca0ad2c114d141bfc4b90942531 GIT binary patch literal 1422304 zcmeEvd3aPs)^|6gF^G7Bf=0)s(V#&^5;d9t(QcB!ZRu#(B%@*yLNGuena~YE0i)?2 z(_S0nxG|1PTt*p}5yug6!)6aUV!&nMHWOUN+eRefh>;oT?{})|-mcWp@AH1&^Zhw_ z9=&ybb?VfqQ>RYVt*YDHRN|jB!0B{Ye*+ztI*4kk=ZHsSv_CaMq#O>9Bi}Iu{~zVZ zV!UZ~&VMFizOW!laBP?TA`-;bPGP~sg~;y z<53w_dY;=C9}f_0_BI{1dXN zoZ}JvM{=3|102mxhnr!K0;_s<_@151?ibz4dgL8~ot)>(s(j8mr^iGODbyca@` z#6JfOJre#k404>Th)Ca##vO_ORT$t%_$4XyZ%%=e4EGW0Jw65hiz)C^Qs`NjLeG~m zP>!VkQ7P>6PKy3IeaMmJ^rYbbDn-33Qs9rIXz!F1?K<=5BkMCIMZ2b^kiX`rBg>hS z0&j)?9Lb(JDfHQpLXMsS-;%Ir5G=#rI7Pz3OhfULVh@f{7+K&XEp49 zq;cm?AwM^T{8iBNNOJy~qF;(r-~&?F`OFl!JB2=@Q?&QE6mnLiz<*5PKTo9Ke=-HX zGlic&mZIN(Od)?oigsOxdXHrPuTt>ekV4PfQ|NPEigEE)3i;Qj@Y`oo@c)#8|Be*+ z?iBhzokGu3QsArLKS#3L<`nXMDfI77q33%k@QxJY>rKo>M~Y*Qr@;S^!vEnu4mbW& z|Gr7V-;iQF{ssb$q|bpAezGBjoFEiBlAXUuVdotw`kHnpcHoaA%*-a zQpjJJg8z~f{rgdhdjFh4emn3Z*==Tuc72s1&TLMBznns!KcujKQ40QxQ}EZMXje@N z`*f!mr^8doKMVMg>~nt#J@==OvowW0uTIgwt5euBJ%#+aDdZ1Nq36sLc36`_pVLyr znJE}|M;gD06#D0+;D0T}c%P60FHF(z%Tn;an?j%0QrN9Nh273iA^)8e_FSK$y}wN1 zpOq>4cSQ>MdsFCh9@^!`f9l`r6!nfv(eF1yz!Cd5g`OXzkguiC|DF`~nS^@JP?ZOL zP6|Ktr>J*9ihduLLZ72k$Zt*IZy71<_ATTObDZR8FF^<45AMYNj>7xYagJjh>sNEy zwrxel^^58kS1busH3ljw92LG9r4@5)8f&hfza&u8IHRcW6*P2XcsYE)9OtN-y4NOp9O-7KdH*;|{*{xX+pNu5k(a<7td&{s$NJMQav?+>RP0^FMHyC_x{oxjnUmDI2ue`zidIdVUtL>Nzo?MCQe)+Xruwn7Jq0ZXt8oAh{v=`}{eKg-=UzFC*73%Tkfk{Ac0a8Six^ihv#qw}#&|L=QH)EEg}rcx4_wBiLZ~9eEYH⪙x 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 w9$8G(MGg3`hl!6 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%0Db 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

pXI+R8V7;mavIP*Mvog&b?WG(FS; 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

-B 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 m8bP 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
3xwAcvTl8 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�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

  • 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
    ij7 zdR&)bhN)VJ-K~!n;`JE`gRL8kkFoSc8D9DI`gk2<=}R-bjJJ)0Q|(Fl9_^NNZ9z`$ zHLjOO%zt<8(8aVM`e3)Dw~$LnKE|M)1*Np#-I9KTw5D5rqzM3}v<2CcK3H0iM^AFh z8kEu&WJ~%SX+ctdqTK`Lu9Yq6n1qe1UjFsZNqT231Q-M=|TAS13I5w z4e^>VGN1he;ujD)V|DfyF~(?Of#VdD+}0~U7BE}zH&U<2v(L~npTVnsQou@h51-Vvuo2AU zUv_%CT0LlEFGE~PJ#VAvtH%rww-6YG@3sNiXSEbQ`g4oa^ZxN8HTK9Pa02or@{w`r z86v$@y&^@QMS9^^*e)l~8^Cp8ss{p2CE)%_q)8ADfSAPb%HzEUZX57wz%&c;3_)b7 z6|PH!D=jl+o>@CE8e>OpYay-xF$ty@5PuH$A*d9x4Z~<6 z%EA#t=E%)fOLHl)uDF-8!PtOoNlH!Xd0$CNQuM7;0#03^MZdC8z?lKG=!+H!I4L0V z!XedO&-s|T<2O*Q(?jG9tmg%uv&GP!7;S-BVOwFNvhOSbn`L+pNI+TL8$h7GKwBg~ z9M{OSN@$Tb;J*&2a;ZfFPI;ip4Tl&ALM0C8D@O_F3v4FT!MJd1kSIGXbdN0mab^gnFOf)>+AcKxdgIn?xDLwMKB!jACt{M{sGpJ|gNm z5ECD-GA_+ZP;G&i4)YAeQ=mpROb>$GvVf6iQ<(j@?vP;ZU^CeM3@ zE91}bkmR#iM(`O?L7w3oB)<}9K9krWKPQazS1nz^BB;yOW1Hc;V&wu(A)sk@hPV=hdmqvVrZsjJ zvZbJzRfMjxPth`HuStBemUvhs;vO;zYLX2sqlc=FSVpAW_+Kfq%O~q9a#AEwVz{og zD~b2S|A%-v_Ss9k&o2V*XYz=Hi5ymt8Ps zsSC#pr5`orCfXKE?|r{sy@n9l+;YjS@iy_79k>M~TObmmj53)1JxnAyzlo;ULf zGZlWpGCGS}WCra)oy9FS!+J9nUSfRAsQsOEM%#@H!rU=i>G_@YcaJt4K!#yiZ_WfOtljoiL>;(Taf5M`3jQ zy3Qubh#`|iSELu&`XY5w#;;=uI1K3c^&5zT!pQiw!^Huo6^Kb39lt&eHy!Bs^&G_S zAhN>>*YWEa%XCD(vtiot3A;zsR8E(pv~V>h(*Fk^LGN`I0%iiu@jr#urE?} z@h(M}$-fioVgtvmzi3X97K3SzsHQG2gC;f$_?B$i61DnR^FN33s13#gHAhWH3XGOchm^6r+Yhx`i|d5?s!ku3>K_&3Xlk>7K{$l(gx zwfr41@<&XNL?h3%-fHBXEb~7axqQk{eq1LbMKUVgOW|p%k*8M=IJJQq`ACSN!ibT- z3GoI99kQ{{Gjd;~7SY; zihL&wwq)O0#HwRsy&aELCtW|!Z90Rx)ǁwPA0G+lgK(c3iSkD6kkJ^zdYr=~sM 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
    ( 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

    2{b_Xpla01HKW5O4U~QF-C@UauuNj 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

    YU`+uA=Y_@gXOfEVMO?g3I1WCj3|RjL^< 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 R@=qw*{POSihz*_p{{X-d#;5=Q literal 0 HcmV?d00001 diff --git a/cosmic_profiles/for_docs/shape_profs/shape_profs_algos.c b/cosmic_profiles/for_docs/shape_profs/shape_profs_algos.c new file mode 100644 index 0000000..fbe2062 --- /dev/null +++ b/cosmic_profiles/for_docs/shape_profs/shape_profs_algos.c @@ -0,0 +1,23113 @@ +/* Generated by Cython 0.29.21 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "depends": [], + "extra_compile_args": [ + "-fopenmp" + ], + "extra_link_args": [ + "-fopenmp" + ], + "include_dirs": [ + "/home/tibor/.local/lib/python3.8/site-packages/numpy/core/include", + "." + ], + "name": "shape_profs.shape_profs_algos", + "sources": [ + "shape_profs/shape_profs_algos.pyx" + ] + }, + "module_name": "shape_profs.shape_profs_algos" +} +END: Cython Metadata */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.6+ or Python 3.3+. +#else +#define CYTHON_ABI "0_29_21" +#define CYTHON_HEX_VERSION 0x001D15F0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__shape_profs__shape_profs_algos +#define __PYX_HAVE_API__shape_profs__shape_profs_algos +/* Early includes */ +#include +#include +#include "pythread.h" +#include +#include +#include +#include "pystate.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + +/* Header.proto */ +#if !defined(CYTHON_CCOMPLEX) + #if defined(__cplusplus) + #define CYTHON_CCOMPLEX 1 + #elif defined(_Complex_I) + #define CYTHON_CCOMPLEX 1 + #else + #define CYTHON_CCOMPLEX 0 + #endif +#endif +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #include + #else + #include + #endif +#endif +#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) + #undef _Complex_I + #define _Complex_I 1.0fj +#endif + + +static const char *__pyx_f[] = { + "shape_profs/shape_profs_algos.pyx", + "stringsource", +}; +/* MemviewSliceStruct.proto */ +struct __pyx_memoryview_obj; +typedef struct { + struct __pyx_memoryview_obj *memview; + char *data; + Py_ssize_t shape[8]; + Py_ssize_t strides[8]; + Py_ssize_t suboffsets[8]; +} __Pyx_memviewslice; +#define __Pyx_MemoryView_Len(m) (m.shape[0]) + +/* Atomics.proto */ +#include +#ifndef CYTHON_ATOMICS + #define CYTHON_ATOMICS 1 +#endif +#define __pyx_atomic_int_type int +#if CYTHON_ATOMICS && __GNUC__ >= 4 && (__GNUC_MINOR__ > 1 ||\ + (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL >= 2)) &&\ + !defined(__i386__) + #define __pyx_atomic_incr_aligned(value, lock) __sync_fetch_and_add(value, 1) + #define __pyx_atomic_decr_aligned(value, lock) __sync_fetch_and_sub(value, 1) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using GNU atomics" + #endif +#elif CYTHON_ATOMICS && defined(_MSC_VER) && 0 + #include + #undef __pyx_atomic_int_type + #define __pyx_atomic_int_type LONG + #define __pyx_atomic_incr_aligned(value, lock) InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #pragma message ("Using MSVC atomics") + #endif +#elif CYTHON_ATOMICS && (defined(__ICC) || defined(__INTEL_COMPILER)) && 0 + #define __pyx_atomic_incr_aligned(value, lock) _InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) _InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using Intel atomics" + #endif +#else + #undef CYTHON_ATOMICS + #define CYTHON_ATOMICS 0 + #ifdef __PYX_DEBUG_ATOMICS + #warning "Not using atomics" + #endif +#endif +typedef volatile __pyx_atomic_int_type __pyx_atomic_int; +#if CYTHON_ATOMICS + #define __pyx_add_acquisition_count(memview)\ + __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) +#else + #define __pyx_add_acquisition_count(memview)\ + __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) +#endif + +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* NoFastGil.proto */ +#define __Pyx_PyGILState_Ensure PyGILState_Ensure +#define __Pyx_PyGILState_Release PyGILState_Release +#define __Pyx_FastGIL_Remember() +#define __Pyx_FastGIL_Forget() +#define __Pyx_FastGilFuncInit() + +/* BufferFormatStructs.proto */ +#define IS_UNSIGNED(type) (((type) -1) > 0) +struct __Pyx_StructField_; +#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) +typedef struct { + const char* name; + struct __Pyx_StructField_* fields; + size_t size; + size_t arraysize[8]; + int ndim; + char typegroup; + char is_unsigned; + int flags; +} __Pyx_TypeInfo; +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + size_t new_count, enc_count; + size_t struct_alignment; + int is_complex; + char enc_type; + char new_packmode; + char enc_packmode; + char is_valid_array; +} __Pyx_BufFmt_Context; + +/* Declarations.proto */ +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< double > __pyx_t_double_complex; + #else + typedef double _Complex __pyx_t_double_complex; + #endif +#else + typedef struct { double real, imag; } __pyx_t_double_complex; +#endif +static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); + + +/*--- Type declarations ---*/ +struct __pyx_array_obj; +struct __pyx_MemviewEnum_obj; +struct __pyx_memoryview_obj; +struct __pyx_memoryviewslice_obj; + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ +struct __pyx_array_obj { + PyObject_HEAD + struct __pyx_vtabstruct_array *__pyx_vtab; + char *data; + Py_ssize_t len; + char *format; + int ndim; + Py_ssize_t *_shape; + Py_ssize_t *_strides; + Py_ssize_t itemsize; + PyObject *mode; + PyObject *_format; + void (*callback_free_data)(void *); + int free_data; + int dtype_is_object; +}; + + +/* "View.MemoryView":279 + * + * @cname('__pyx_MemviewEnum') + * cdef class Enum(object): # <<<<<<<<<<<<<< + * cdef object name + * def __init__(self, name): + */ +struct __pyx_MemviewEnum_obj { + PyObject_HEAD + PyObject *name; +}; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ +struct __pyx_memoryview_obj { + PyObject_HEAD + struct __pyx_vtabstruct_memoryview *__pyx_vtab; + PyObject *obj; + PyObject *_size; + PyObject *_array_interface; + PyThread_type_lock lock; + __pyx_atomic_int acquisition_count[2]; + __pyx_atomic_int *acquisition_count_aligned_p; + Py_buffer view; + int flags; + int dtype_is_object; + __Pyx_TypeInfo *typeinfo; +}; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ +struct __pyx_memoryviewslice_obj { + struct __pyx_memoryview_obj __pyx_base; + __Pyx_memviewslice from_slice; + PyObject *from_object; + PyObject *(*to_object_func)(char *); + int (*to_dtype_func)(char *, PyObject *); +}; + + + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ + +struct __pyx_vtabstruct_array { + PyObject *(*get_memview)(struct __pyx_array_obj *); +}; +static struct __pyx_vtabstruct_array *__pyx_vtabptr_array; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ + +struct __pyx_vtabstruct_memoryview { + char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *); + PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *); +}; +static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ + +struct __pyx_vtabstruct__memoryviewslice { + struct __pyx_vtabstruct_memoryview __pyx_base; +}; +static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* MemviewSliceInit.proto */ +#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d +#define __Pyx_MEMVIEW_DIRECT 1 +#define __Pyx_MEMVIEW_PTR 2 +#define __Pyx_MEMVIEW_FULL 4 +#define __Pyx_MEMVIEW_CONTIG 8 +#define __Pyx_MEMVIEW_STRIDED 16 +#define __Pyx_MEMVIEW_FOLLOW 32 +#define __Pyx_IS_C_CONTIG 1 +#define __Pyx_IS_F_CONTIG 2 +static int __Pyx_init_memviewslice( + struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference); +static CYTHON_INLINE int __pyx_add_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +#define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p) +#define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview)) +#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) +#define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__) +static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int); + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* StrEquals.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals +#else +#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +#endif + +/* None.proto */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); + +/* UnaryNegOverflows.proto */ +#define UNARY_NEG_WOULD_OVERFLOW(x)\ + (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) + +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/ +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* 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_string.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, 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)); + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseNoneIterError.proto */ +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 +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) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +static CYTHON_UNUSED 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 +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) +#endif + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* ListExtend.proto */ +static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { +#if CYTHON_COMPILING_IN_CPYTHON + PyObject* none = _PyList_Extend((PyListObject*)L, v); + if (unlikely(!none)) + return -1; + Py_DECREF(none); + return 0; +#else + return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); +#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); + PyList_SET_ITEM(list, len, x); + __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 + +/* None.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); + +/* None.proto */ +static CYTHON_INLINE long __Pyx_div_long(long, long); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* SetVTable.proto */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable); + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* SetupReduce.proto */ +static int __Pyx_setup_reduce(PyObject* type_obj); + +/* FetchCommonType.proto */ +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED 1 +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { + PyCFunctionObject func; +#if PY_VERSION_HEX < 0x030500A0 + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; + PyObject *func_classobj; + void *defaults; + int defaults_pyobjects; + size_t defaults_size; // used by FusedFunction for copying defaults + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; +} __pyx_CyFunctionObject; +static PyTypeObject *__pyx_CyFunctionType = 0; +#define __Pyx_CyFunction_Check(obj) (__Pyx_TypeCheck(obj, __pyx_CyFunctionType)) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *self, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(void); + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +#if PY_MAJOR_VERSION < 3 + static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); + static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else + #define __Pyx_GetBuffer PyObject_GetBuffer + #define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + + +/* BufferStructDeclare.proto */ +typedef struct { + Py_ssize_t shape, strides, suboffsets; +} __Pyx_Buf_DimInfo; +typedef struct { + size_t refcount; + Py_buffer pybuffer; +} __Pyx_Buffer; +typedef struct { + __Pyx_Buffer *rcbuffer; + char *data; + __Pyx_Buf_DimInfo diminfo[8]; +} __Pyx_LocalBuf_ND; + +/* MemviewSliceIsContig.proto */ +static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim); + +/* OverlappingSlices.proto */ +static int __pyx_slices_overlap(__Pyx_memviewslice *slice1, + __Pyx_memviewslice *slice2, + int ndim, size_t itemsize); + +/* Capsule.proto */ +static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig); + +/* RealImag.proto */ +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #define __Pyx_CREAL(z) ((z).real()) + #define __Pyx_CIMAG(z) ((z).imag()) + #else + #define __Pyx_CREAL(z) (__real__(z)) + #define __Pyx_CIMAG(z) (__imag__(z)) + #endif +#else + #define __Pyx_CREAL(z) ((z).real) + #define __Pyx_CIMAG(z) ((z).imag) +#endif +#if defined(__cplusplus) && CYTHON_CCOMPLEX\ + && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103) + #define __Pyx_SET_CREAL(z,x) ((z).real(x)) + #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) +#else + #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) + #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) +#endif + +/* Arithmetic.proto */ +#if CYTHON_CCOMPLEX + #define __Pyx_c_eq_double(a, b) ((a)==(b)) + #define __Pyx_c_sum_double(a, b) ((a)+(b)) + #define __Pyx_c_diff_double(a, b) ((a)-(b)) + #define __Pyx_c_prod_double(a, b) ((a)*(b)) + #define __Pyx_c_quot_double(a, b) ((a)/(b)) + #define __Pyx_c_neg_double(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_double(z) ((z)==(double)0) + #define __Pyx_c_conj_double(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_double(z) (::std::abs(z)) + #define __Pyx_c_pow_double(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_double(z) ((z)==0) + #define __Pyx_c_conj_double(z) (conj(z)) + #if 1 + #define __Pyx_c_abs_double(z) (cabs(z)) + #define __Pyx_c_pow_double(a, b) (cpow(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex); + #if 1 + static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex); + #endif +#endif + +/* IsLittleEndian.proto */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); + +/* BufferFormatCheck.proto */ +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts); +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type); + +/* TypeInfoCompare.proto */ +static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b); + +/* MemviewSliceValidateAndInit.proto */ +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); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_float(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_float(PyObject *, int writable_flag); + +/* MemviewSliceCopyTemplate.proto */ +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); + +/* 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); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *); + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/ +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/ +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ + +/* Module declarations from 'openmp' */ + +/* Module declarations from 'cython.view' */ + +/* Module declarations from 'cython' */ + +/* Module declarations from 'libc.math' */ + +/* Module declarations from 'shape_profs.shape_profs_algos' */ +static PyTypeObject *__pyx_array_type = 0; +static PyTypeObject *__pyx_MemviewEnum_type = 0; +static PyTypeObject *__pyx_memoryview_type = 0; +static PyTypeObject *__pyx_memoryviewslice_type = 0; +static PyObject *generic = 0; +static PyObject *strided = 0; +static PyObject *indirect = 0; +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 struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/ +static void *__pyx_align_pointer(void *, size_t); /*proto*/ +static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/ +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/ +static PyObject *_unellipsify(PyObject *, int); /*proto*/ +static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/ +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/ +static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/ +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/ +static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/ +static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/ +static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/ +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/ +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/ +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/ +static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/ +static int __pyx_memoryview_err(PyObject *, char *); /*proto*/ +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/ +static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/ +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_float = { "float", NULL, sizeof(float), { 0 }, 0, 'R', 0, 0 }; +#define __Pyx_MODULE_NAME "shape_profs.shape_profs_algos" +extern int __pyx_module_is_main_shape_profs__shape_profs_algos; +int __pyx_module_is_main_shape_profs__shape_profs_algos = 0; + +/* Implementation of 'shape_profs.shape_profs_algos' */ +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_MemoryError; +static PyObject *__pyx_builtin_enumerate; +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_Ellipsis; +static PyObject *__pyx_builtin_id; +static PyObject *__pyx_builtin_IndexError; +static const char __pyx_k_O[] = "O"; +static const char __pyx_k_c[] = "c"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_cat[] = "cat"; +static const char __pyx_k_new[] = "__new__"; +static const char __pyx_k_obj[] = "obj"; +static const char __pyx_k_xyz[] = "xyz"; +static const char __pyx_k_SAFE[] = "SAFE"; +static const char __pyx_k_base[] = "base"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mode[] = "mode"; +static const char __pyx_k_name[] = "name"; +static const char __pyx_k_ndim[] = "ndim"; +static const char __pyx_k_pack[] = "pack"; +static const char __pyx_k_r200[] = "r200"; +static const char __pyx_k_size[] = "size"; +static const char __pyx_k_step[] = "step"; +static const char __pyx_k_stop[] = "stop"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_vxyz[] = "vxyz"; +static const char __pyx_k_ASCII[] = "ASCII"; +static const char __pyx_k_L_BOX[] = "L_BOX"; +static const char __pyx_k_M_TOL[] = "M_TOL"; +static const char __pyx_k_N_MIN[] = "N_MIN"; +static const char __pyx_k_class[] = "__class__"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_flags[] = "flags"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_shape[] = "shape"; +static const char __pyx_k_start[] = "start"; +static const char __pyx_k_CENTER[] = "CENTER"; +static const char __pyx_k_D_BINS[] = "D_BINS"; +static const char __pyx_k_N_WALL[] = "N_WALL"; +static const char __pyx_k_encode[] = "encode"; +static const char __pyx_k_format[] = "format"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_masses[] = "masses"; +static const char __pyx_k_name_2[] = "__name__"; +static const char __pyx_k_pickle[] = "pickle"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_struct[] = "struct"; +static const char __pyx_k_unpack[] = "unpack"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_fortran[] = "fortran"; +static const char __pyx_k_memview[] = "memview"; +static const char __pyx_k_reduced[] = "reduced"; +static const char __pyx_k_D_LOGEND[] = "D_LOGEND"; +static const char __pyx_k_Ellipsis[] = "Ellipsis"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_itemsize[] = "itemsize"; +static const char __pyx_k_pyx_type[] = "__pyx_type"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_TypeError[] = "TypeError"; +static const char __pyx_k_enumerate[] = "enumerate"; +static const char __pyx_k_pyx_state[] = "__pyx_state"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_D_LOGSTART[] = "D_LOGSTART"; +static const char __pyx_k_IndexError[] = "IndexError"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_pyx_result[] = "__pyx_result"; +static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; +static const char __pyx_k_MemoryError[] = "MemoryError"; +static const char __pyx_k_PickleError[] = "PickleError"; +static const char __pyx_k_shell_based[] = "shell_based"; +static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; +static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_calcMorphLocal[] = "calcMorphLocal"; +static const char __pyx_k_MIN_NUMBER_PTCS[] = "MIN_NUMBER_PTCS"; +static const char __pyx_k_View_MemoryView[] = "View.MemoryView"; +static const char __pyx_k_allocate_buffer[] = "allocate_buffer"; +static const char __pyx_k_calcMorphGlobal[] = "calcMorphGlobal"; +static const char __pyx_k_dtype_is_object[] = "dtype_is_object"; +static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_strided_and_direct[] = ""; +static const char __pyx_k_strided_and_indirect[] = ""; +static const char __pyx_k_calcMorphLocalVelDisp[] = "calcMorphLocalVelDisp"; +static const char __pyx_k_contiguous_and_direct[] = ""; +static const char __pyx_k_MemoryView_of_r_object[] = ""; +static const char __pyx_k_calcMorphGlobalVelDisp[] = "calcMorphGlobalVelDisp"; +static const char __pyx_k_MemoryView_of_r_at_0x_x[] = ""; +static const char __pyx_k_contiguous_and_indirect[] = ""; +static const char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'"; +static const char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d."; +static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array"; +static const char __pyx_k_shape_profs_shape_profs_algos[] = "shape_profs.shape_profs_algos"; +static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data."; +static const char __pyx_k_strided_and_direct_or_indirect[] = ""; +static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides"; +static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory."; +static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview"; +static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview"; +static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array"; +static const char __pyx_k_Incompatible_checksums_s_vs_0xb0[] = "Incompatible checksums (%s vs 0xb068931 = (name))"; +static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported"; +static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got %s"; +static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis %d)"; +static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object"; +static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension %d (got %d and %d)"; +static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__"; +static const char __pyx_k_shape_profs_shape_profs_algos_py[] = "shape_profs/shape_profs_algos.pyx"; +static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides."; +static PyObject *__pyx_n_s_ASCII; +static PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri; +static PyObject *__pyx_n_s_CENTER; +static PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is; +static PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor; +static PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi; +static PyObject *__pyx_kp_s_Cannot_index_with_type_s; +static PyObject *__pyx_n_s_D_BINS; +static PyObject *__pyx_n_s_D_LOGEND; +static PyObject *__pyx_n_s_D_LOGSTART; +static PyObject *__pyx_n_s_Ellipsis; +static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xb0; +static PyObject *__pyx_n_s_IndexError; +static PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte; +static PyObject *__pyx_kp_s_Invalid_mode_expected_c_or_fortr; +static PyObject *__pyx_kp_s_Invalid_shape_in_axis_d_d; +static PyObject *__pyx_n_s_L_BOX; +static PyObject *__pyx_n_s_MIN_NUMBER_PTCS; +static PyObject *__pyx_n_s_M_TOL; +static PyObject *__pyx_n_s_MemoryError; +static PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x; +static PyObject *__pyx_kp_s_MemoryView_of_r_object; +static PyObject *__pyx_n_s_N_MIN; +static PyObject *__pyx_n_s_N_WALL; +static PyObject *__pyx_n_b_O; +static PyObject *__pyx_kp_s_Out_of_bounds_on_buffer_access_a; +static PyObject *__pyx_n_s_PickleError; +static PyObject *__pyx_n_s_SAFE; +static PyObject *__pyx_n_s_TypeError; +static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object; +static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_n_s_View_MemoryView; +static PyObject *__pyx_n_s_allocate_buffer; +static PyObject *__pyx_n_s_base; +static PyObject *__pyx_n_s_c; +static PyObject *__pyx_n_u_c; +static PyObject *__pyx_n_s_calcMorphGlobal; +static PyObject *__pyx_n_s_calcMorphGlobalVelDisp; +static PyObject *__pyx_n_s_calcMorphLocal; +static PyObject *__pyx_n_s_calcMorphLocalVelDisp; +static PyObject *__pyx_n_s_cat; +static PyObject *__pyx_n_s_class; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_kp_s_contiguous_and_direct; +static PyObject *__pyx_kp_s_contiguous_and_indirect; +static PyObject *__pyx_n_s_dict; +static PyObject *__pyx_n_s_dtype_is_object; +static PyObject *__pyx_n_s_encode; +static PyObject *__pyx_n_s_enumerate; +static PyObject *__pyx_n_s_error; +static PyObject *__pyx_n_s_flags; +static PyObject *__pyx_n_s_format; +static PyObject *__pyx_n_s_fortran; +static PyObject *__pyx_n_u_fortran; +static PyObject *__pyx_n_s_getstate; +static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi; +static PyObject *__pyx_n_s_id; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_itemsize; +static PyObject *__pyx_kp_s_itemsize_0_for_cython_array; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_masses; +static PyObject *__pyx_n_s_memview; +static PyObject *__pyx_n_s_mode; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_name_2; +static PyObject *__pyx_n_s_ndim; +static PyObject *__pyx_n_s_new; +static PyObject *__pyx_kp_s_no_default___reduce___due_to_non; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_numpy; +static PyObject *__pyx_n_s_obj; +static PyObject *__pyx_n_s_pack; +static PyObject *__pyx_n_s_pickle; +static PyObject *__pyx_n_s_pyx_PickleError; +static PyObject *__pyx_n_s_pyx_checksum; +static PyObject *__pyx_n_s_pyx_getbuffer; +static PyObject *__pyx_n_s_pyx_result; +static PyObject *__pyx_n_s_pyx_state; +static PyObject *__pyx_n_s_pyx_type; +static PyObject *__pyx_n_s_pyx_unpickle_Enum; +static PyObject *__pyx_n_s_pyx_vtable; +static PyObject *__pyx_n_s_r200; +static PyObject *__pyx_n_s_range; +static PyObject *__pyx_n_s_reduce; +static PyObject *__pyx_n_s_reduce_cython; +static PyObject *__pyx_n_s_reduce_ex; +static PyObject *__pyx_n_s_reduced; +static PyObject *__pyx_n_s_setstate; +static PyObject *__pyx_n_s_setstate_cython; +static PyObject *__pyx_n_s_shape; +static PyObject *__pyx_n_s_shape_profs_shape_profs_algos; +static PyObject *__pyx_kp_s_shape_profs_shape_profs_algos_py; +static PyObject *__pyx_n_s_shell_based; +static PyObject *__pyx_n_s_size; +static PyObject *__pyx_n_s_start; +static PyObject *__pyx_n_s_step; +static PyObject *__pyx_n_s_stop; +static PyObject *__pyx_kp_s_strided_and_direct; +static PyObject *__pyx_kp_s_strided_and_direct_or_indirect; +static PyObject *__pyx_kp_s_strided_and_indirect; +static PyObject *__pyx_kp_s_stringsource; +static PyObject *__pyx_n_s_struct; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_kp_s_unable_to_allocate_array_data; +static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str; +static PyObject *__pyx_n_s_unpack; +static PyObject *__pyx_n_s_update; +static PyObject *__pyx_n_s_vxyz; +static PyObject *__pyx_n_s_xyz; +static PyObject *__pyx_pf_11shape_profs_17shape_profs_algos_calcMorphLocal(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200, CYTHON_UNUSED PyObject *__pyx_v_cat, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED int __pyx_v_D_LOGSTART, CYTHON_UNUSED int __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED int __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CENTER, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_11shape_profs_17shape_profs_algos_2calcMorphGlobal(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200, CYTHON_UNUSED PyObject *__pyx_v_cat, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED int __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CENTER, CYTHON_UNUSED float __pyx_v_SAFE, CYTHON_UNUSED int __pyx_v_reduced); /* proto */ +static PyObject *__pyx_pf_11shape_profs_17shape_profs_algos_4calcMorphLocalVelDisp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200, CYTHON_UNUSED PyObject *__pyx_v_cat, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED int __pyx_v_D_LOGSTART, CYTHON_UNUSED int __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED int __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CENTER, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based); /* proto */ +static PyObject *__pyx_pf_11shape_profs_17shape_profs_algos_6calcMorphGlobalVelDisp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200, CYTHON_UNUSED PyObject *__pyx_v_cat, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED int __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CENTER, CYTHON_UNUSED float __pyx_v_SAFE, CYTHON_UNUSED int __pyx_v_reduced); /* proto */ +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 */ +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */ +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */ +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +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 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*/ +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_1; +static PyObject *__pyx_int_184977713; +static PyObject *__pyx_int_neg_1; +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__4; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__6; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_tuple__8; +static PyObject *__pyx_tuple__9; +static PyObject *__pyx_slice__15; +static PyObject *__pyx_tuple__10; +static PyObject *__pyx_tuple__11; +static PyObject *__pyx_tuple__12; +static PyObject *__pyx_tuple__13; +static PyObject *__pyx_tuple__14; +static PyObject *__pyx_tuple__16; +static PyObject *__pyx_tuple__17; +static PyObject *__pyx_tuple__18; +static PyObject *__pyx_tuple__19; +static PyObject *__pyx_tuple__21; +static PyObject *__pyx_tuple__23; +static PyObject *__pyx_tuple__25; +static PyObject *__pyx_tuple__27; +static PyObject *__pyx_tuple__28; +static PyObject *__pyx_tuple__29; +static PyObject *__pyx_tuple__30; +static PyObject *__pyx_tuple__31; +static PyObject *__pyx_tuple__32; +static PyObject *__pyx_codeobj__20; +static PyObject *__pyx_codeobj__22; +static PyObject *__pyx_codeobj__24; +static PyObject *__pyx_codeobj__26; +static PyObject *__pyx_codeobj__33; +/* Late includes */ + +/* "shape_profs/shape_profs_algos.pyx":11 + * + * @cython.embedsignature(True) + * cdef float[:] runShellAlgo(float[:] morph_info, float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, int[:] shell, float[:] r_ell, float[:] center, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float d, float delta_d, float M_TOL, int N_WALL, int N_MIN, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ S1 algorithm for halos/galaxies at elliptical radius ``d`` with shell width ``delta_d`` + * + */ + +static __Pyx_memviewslice __pyx_f_11shape_profs_17shape_profs_algos_runShellAlgo(__Pyx_memviewslice __pyx_v_morph_info, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r_ell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shape_tensor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigval, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigvec, CYTHON_UNUSED float __pyx_v_d, CYTHON_UNUSED float __pyx_v_delta_d, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced) { + __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } }; + + /* "shape_profs/shape_profs_algos.pyx":61 + * :return: ``morph_info`` containing d, q, s, eigframe info + * :rtype: (12,) float array""" + * return morph_info # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __PYX_INC_MEMVIEW(&__pyx_v_morph_info, 1); + __pyx_r = __pyx_v_morph_info; + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":11 + * + * @cython.embedsignature(True) + * cdef float[:] runShellAlgo(float[:] morph_info, float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, int[:] shell, float[:] r_ell, float[:] center, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float d, float delta_d, float M_TOL, int N_WALL, int N_MIN, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ S1 algorithm for halos/galaxies at elliptical radius ``d`` with shell width ``delta_d`` + * + */ + + /* function exit code */ + __pyx_L0:; + if (unlikely(!__pyx_r.memview)) { + PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized"); + } + return __pyx_r; +} + +/* "shape_profs/shape_profs_algos.pyx":64 + * + * @cython.embedsignature(True) + * cdef float[:] runEllAlgo(float[:] morph_info, float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, int[:] ellipsoid, float[:] r_ell, float[:] center, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float d, float M_TOL, int N_WALL, int N_MIN, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ Katz-Dubinski ellipsoid-based algorithm for halos/galaxies at elliptical radius ``d`` + * + */ + +static __Pyx_memviewslice __pyx_f_11shape_profs_17shape_profs_algos_runEllAlgo(__Pyx_memviewslice __pyx_v_morph_info, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ellipsoid, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r_ell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shape_tensor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigval, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigvec, CYTHON_UNUSED float __pyx_v_d, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced) { + __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } }; + + /* "shape_profs/shape_profs_algos.pyx":108 + * :rtype: (12,) float array""" + * + * return morph_info # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __PYX_INC_MEMVIEW(&__pyx_v_morph_info, 1); + __pyx_r = __pyx_v_morph_info; + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":64 + * + * @cython.embedsignature(True) + * cdef float[:] runEllAlgo(float[:] morph_info, float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, int[:] ellipsoid, float[:] r_ell, float[:] center, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float d, float M_TOL, int N_WALL, int N_MIN, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ Katz-Dubinski ellipsoid-based algorithm for halos/galaxies at elliptical radius ``d`` + * + */ + + /* function exit code */ + __pyx_L0:; + if (unlikely(!__pyx_r.memview)) { + PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized"); + } + return __pyx_r; +} + +/* "shape_profs/shape_profs_algos.pyx":111 + * + * @cython.embedsignature(True) + * cdef float[:] runEllVDispAlgo(float[:] morph_info, float[:,:] xyz, float[:,:] vxyz, float[:,:] xyz_princ, float[:] masses, int[:] ellipsoid, float[:] r_ell, float[:] center, float[:] vcenter, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float d, float M_TOL, int N_WALL, int N_MIN, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ Similar to ``runEllAlgo`` algorithm for halos/galaxies but for velocity dispersion tensor + * + */ + +static __Pyx_memviewslice __pyx_f_11shape_profs_17shape_profs_algos_runEllVDispAlgo(__Pyx_memviewslice __pyx_v_morph_info, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ellipsoid, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r_ell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vcenter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shape_tensor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigval, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigvec, CYTHON_UNUSED float __pyx_v_d, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced) { + __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } }; + + /* "shape_profs/shape_profs_algos.pyx":159 + * :rtype: (12,) float array""" + * + * return morph_info # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __PYX_INC_MEMVIEW(&__pyx_v_morph_info, 1); + __pyx_r = __pyx_v_morph_info; + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":111 + * + * @cython.embedsignature(True) + * cdef float[:] runEllVDispAlgo(float[:] morph_info, float[:,:] xyz, float[:,:] vxyz, float[:,:] xyz_princ, float[:] masses, int[:] ellipsoid, float[:] r_ell, float[:] center, float[:] vcenter, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float d, float M_TOL, int N_WALL, int N_MIN, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ Similar to ``runEllAlgo`` algorithm for halos/galaxies but for velocity dispersion tensor + * + */ + + /* function exit code */ + __pyx_L0:; + if (unlikely(!__pyx_r.memview)) { + PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized"); + } + return __pyx_r; +} + +/* "shape_profs/shape_profs_algos.pyx":162 + * + * @cython.embedsignature(True) + * cdef float[:] runShellVDispAlgo(float[:] morph_info, float[:,:] xyz, float[:,:] vxyz, float[:,:] xyz_princ, float[:] masses, int[:] shell, float[:] r_ell, float[:] center, float[:] vcenter, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float d, float delta_d, float M_TOL, int N_WALL, int N_MIN, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ Similar to ``runShellAlgo`` algorithm for halos/galaxies but for velocity dispersion tensor + * + */ + +static __Pyx_memviewslice __pyx_f_11shape_profs_17shape_profs_algos_runShellVDispAlgo(__Pyx_memviewslice __pyx_v_morph_info, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r_ell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vcenter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shape_tensor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigval, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigvec, CYTHON_UNUSED float __pyx_v_d, CYTHON_UNUSED float __pyx_v_delta_d, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced) { + __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } }; + + /* "shape_profs/shape_profs_algos.pyx":212 + * :rtype: (12,) float array""" + * + * return morph_info # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __PYX_INC_MEMVIEW(&__pyx_v_morph_info, 1); + __pyx_r = __pyx_v_morph_info; + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":162 + * + * @cython.embedsignature(True) + * cdef float[:] runShellVDispAlgo(float[:] morph_info, float[:,:] xyz, float[:,:] vxyz, float[:,:] xyz_princ, float[:] masses, int[:] shell, float[:] r_ell, float[:] center, float[:] vcenter, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float d, float delta_d, float M_TOL, int N_WALL, int N_MIN, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ Similar to ``runShellAlgo`` algorithm for halos/galaxies but for velocity dispersion tensor + * + */ + + /* function exit code */ + __pyx_L0:; + if (unlikely(!__pyx_r.memview)) { + PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized"); + } + return __pyx_r; +} + +/* "shape_profs/shape_profs_algos.pyx":216 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphLocal(float[:,:] xyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, int M_TOL, int N_WALL, int N_MIN, str CENTER, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Calculates the local shape catalogue + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11shape_profs_17shape_profs_algos_1calcMorphLocal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_11shape_profs_17shape_profs_algos_calcMorphLocal[] = "calcMorphLocal(float[:, :] xyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, int M_TOL, int N_WALL, int N_MIN, unicode CENTER, bool reduced, bool shell_based)\n Calculates the local shape catalogue\n \n Calls ``calcObjMorphLocal()`` in a parallelized manner.\n\n Calculates the axis ratios for the range [ ``r200`` x 10**(``D_LOGSTART``), ``r200`` x 10**(``D_LOGEND``)] from the centers, for each object.\n \n :param xyz: positions of all (DM or star) particles in simulation box\n :type xyz: (N2 x 3) floats\n :param cat: each entry of the list is a list containing indices of particles belonging to an object\n :type cat: list of length N1\n :param masses: masses of the particles expressed in unit mass\n :type masses: (N2 x 1) floats\n :param r200: each entry of the list gives the R_200 radius of the parent halo\n :type r200: list of length N1\n :param L_BOX: simulation box side length\n :type L_BOX: float, units: Mpc/h\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest minus 1 (i.e. number of bins)\n :type D_BINS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param CENTER: shape quantities will be calcu""lated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :return: d, q, s, eigframe, centers, masses, l_succeed: list of object indices for which morphology could be determined at R200 (length: N3)\n :rtype: (N3, ``D_BINS`` + 1) floats (for d, q, s, eigframe (x3)), (N3, 3) floats (for centers), (N3,) floats (for masses), N3-list of ints for l_succeed\n "; +static PyMethodDef __pyx_mdef_11shape_profs_17shape_profs_algos_1calcMorphLocal = {"calcMorphLocal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11shape_profs_17shape_profs_algos_1calcMorphLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11shape_profs_17shape_profs_algos_calcMorphLocal}; +static PyObject *__pyx_pw_11shape_profs_17shape_profs_algos_1calcMorphLocal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_cat = 0; + CYTHON_UNUSED float __pyx_v_L_BOX; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED int __pyx_v_D_LOGSTART; + CYTHON_UNUSED int __pyx_v_D_LOGEND; + CYTHON_UNUSED int __pyx_v_D_BINS; + CYTHON_UNUSED int __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED PyObject *__pyx_v_CENTER = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMorphLocal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_r200,&__pyx_n_s_cat,&__pyx_n_s_L_BOX,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_D_LOGSTART,&__pyx_n_s_D_LOGEND,&__pyx_n_s_D_BINS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_CENTER,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 1); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 2); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 3); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 4); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 5); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGSTART)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 6); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGEND)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 7); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 8); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 9); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 10); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 11); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 12); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 13); __PYX_ERR(0, 216, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, 14); __PYX_ERR(0, 216, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcMorphLocal") < 0)) __PYX_ERR(0, 216, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 15) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_r200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r200.memview)) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_cat = values[3]; + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_D_LOGSTART = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_D_LOGSTART == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_D_LOGEND = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_D_LOGEND == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_D_BINS = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_D_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_M_TOL = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_M_TOL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[10]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[11]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[12]); + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[13]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[14]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcMorphLocal", 1, 15, 15, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 216, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("shape_profs.shape_profs_algos.calcMorphLocal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 216, __pyx_L1_error) + __pyx_r = __pyx_pf_11shape_profs_17shape_profs_algos_calcMorphLocal(__pyx_self, __pyx_v_xyz, __pyx_v_masses, __pyx_v_r200, __pyx_v_cat, __pyx_v_L_BOX, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_D_LOGSTART, __pyx_v_D_LOGEND, __pyx_v_D_BINS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_CENTER, __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11shape_profs_17shape_profs_algos_calcMorphLocal(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200, CYTHON_UNUSED PyObject *__pyx_v_cat, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED int __pyx_v_D_LOGSTART, CYTHON_UNUSED int __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED int __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CENTER, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMorphLocal", 0); + + /* "shape_profs/shape_profs_algos.pyx":258 + * :rtype: (N3, ``D_BINS`` + 1) floats (for d, q, s, eigframe (x3)), (N3, 3) floats (for centers), (N3,) floats (for masses), N3-list of ints for l_succeed + * """ + * return # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":216 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphLocal(float[:,:] xyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, int M_TOL, int N_WALL, int N_MIN, str CENTER, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Calculates the local shape catalogue + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r200, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "shape_profs/shape_profs_algos.pyx":262 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphGlobal(float[:,:] xyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int M_TOL, int N_WALL, int N_MIN, str CENTER, float SAFE, bint reduced): # <<<<<<<<<<<<<< + * """ Calculates the overall shape catalogue + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11shape_profs_17shape_profs_algos_3calcMorphGlobal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_11shape_profs_17shape_profs_algos_2calcMorphGlobal[] = "calcMorphGlobal(float[:, :] xyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int M_TOL, int N_WALL, int N_MIN, unicode CENTER, float SAFE, bool reduced)\n Calculates the overall shape catalogue\n \n Calls ``calcObjMorphGlobal()`` in a parallelized manner.\n\n Calculates the overall axis ratios and eigenframe for each object.\n \n :param xyz: positions of all (DM or star) particles in simulation box\n :type xyz: (N2 x 3) floats\n :param cat: each entry of the list is a list containing indices of particles belonging to an object\n :type cat: list of length N1\n :param masses: masses of the particles expressed in unit mass\n :type masses: (N2 x 1) floats\n :param r200: each entry of the list gives the R_200 radius of the parent halo\n :type r200: list of length N1\n :param L_BOX: simulation box side length\n :type L_BOX: float, units: Mpc/h\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param CENTER: shape quantities will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str\n :param SAFE: ellipsoidal radius will be maxdist(COM,point)+SAFE where point is any point in the point cloud. \n The larger the better.\n :type SAFE: float\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :return: d, q, s, eigframe, centers, masses\n :rtype: (N3,) floats (for d, q, s, eigfr""ame (x3)), (N3, 3) floats (for centers), (N3,) floats (for masses)\n "; +static PyMethodDef __pyx_mdef_11shape_profs_17shape_profs_algos_3calcMorphGlobal = {"calcMorphGlobal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11shape_profs_17shape_profs_algos_3calcMorphGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11shape_profs_17shape_profs_algos_2calcMorphGlobal}; +static PyObject *__pyx_pw_11shape_profs_17shape_profs_algos_3calcMorphGlobal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_cat = 0; + CYTHON_UNUSED float __pyx_v_L_BOX; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED int __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED PyObject *__pyx_v_CENTER = 0; + CYTHON_UNUSED float __pyx_v_SAFE; + CYTHON_UNUSED int __pyx_v_reduced; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMorphGlobal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_masses,&__pyx_n_s_r200,&__pyx_n_s_cat,&__pyx_n_s_L_BOX,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_CENTER,&__pyx_n_s_SAFE,&__pyx_n_s_reduced,0}; + PyObject* values[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, 1); __PYX_ERR(0, 262, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, 2); __PYX_ERR(0, 262, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, 3); __PYX_ERR(0, 262, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, 4); __PYX_ERR(0, 262, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, 5); __PYX_ERR(0, 262, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, 6); __PYX_ERR(0, 262, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, 7); __PYX_ERR(0, 262, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, 8); __PYX_ERR(0, 262, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, 9); __PYX_ERR(0, 262, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_SAFE)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, 10); __PYX_ERR(0, 262, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, 11); __PYX_ERR(0, 262, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcMorphGlobal") < 0)) __PYX_ERR(0, 262, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 12) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 262, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 262, __pyx_L3_error) + __pyx_v_r200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r200.memview)) __PYX_ERR(0, 262, __pyx_L3_error) + __pyx_v_cat = values[3]; + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[4]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 262, __pyx_L3_error) + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 262, __pyx_L3_error) + __pyx_v_M_TOL = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_M_TOL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 262, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 262, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 262, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[9]); + __pyx_v_SAFE = __pyx_PyFloat_AsFloat(values[10]); if (unlikely((__pyx_v_SAFE == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 262, __pyx_L3_error) + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[11]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 262, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcMorphGlobal", 1, 12, 12, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 262, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("shape_profs.shape_profs_algos.calcMorphGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 262, __pyx_L1_error) + __pyx_r = __pyx_pf_11shape_profs_17shape_profs_algos_2calcMorphGlobal(__pyx_self, __pyx_v_xyz, __pyx_v_masses, __pyx_v_r200, __pyx_v_cat, __pyx_v_L_BOX, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_CENTER, __pyx_v_SAFE, __pyx_v_reduced); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11shape_profs_17shape_profs_algos_2calcMorphGlobal(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200, CYTHON_UNUSED PyObject *__pyx_v_cat, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED int __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CENTER, CYTHON_UNUSED float __pyx_v_SAFE, CYTHON_UNUSED int __pyx_v_reduced) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMorphGlobal", 0); + + /* "shape_profs/shape_profs_algos.pyx":299 + * :rtype: (N3,) floats (for d, q, s, eigframe (x3)), (N3, 3) floats (for centers), (N3,) floats (for masses) + * """ + * return # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":262 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphGlobal(float[:,:] xyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int M_TOL, int N_WALL, int N_MIN, str CENTER, float SAFE, bint reduced): # <<<<<<<<<<<<<< + * """ Calculates the overall shape catalogue + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r200, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "shape_profs/shape_profs_algos.pyx":303 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphLocalVelDisp(float[:,:] xyz, float[:,:] vxyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, int M_TOL, int N_WALL, int N_MIN, str CENTER, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Calculates the local velocity dispersion shape catalogue + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11shape_profs_17shape_profs_algos_5calcMorphLocalVelDisp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_11shape_profs_17shape_profs_algos_4calcMorphLocalVelDisp[] = "calcMorphLocalVelDisp(float[:, :] xyz, float[:, :] vxyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, int M_TOL, int N_WALL, int N_MIN, unicode CENTER, bool reduced, bool shell_based)\n Calculates the local velocity dispersion shape catalogue\n \n Calls ``calcObjMorphLocalVelDisp()`` in a parallelized manner.\n\n Calculates the overall axis ratios and eigenframe for each object.\n \n :param xyz: positions of all (DM or star) particles in simulation box\n :type xyz: (N2 x 3) floats\n :param vxyz: velocities of all (DM or star) particles in simulation box\n :type vxyz: (N2 x 3) floats\n :param cat: each entry of the list is a list containing indices of particles belonging to an object\n :type cat: list of length N2\n :param masses: masses of the particles expressed in unit mass\n :type masses: (N2 x 1) floats\n :param r200: each entry of the list gives the R_200 radius of the parent halo\n :type r200: list of length N1\n :param L_BOX: simulation box side length\n :type L_BOX: float, units: Mpc/h\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param D_LOGSTART: logarithm of minimum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGSTART: int\n :param D_LOGEND: logarithm of maximum ellipsoidal radius of interest, in units of R200 of parent halo\n :type D_LOGEND: int\n :param D_BINS: number of ellipsoidal radii of interest mi\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param C""ENTER: shape quantities will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)\n :type reduced: boolean\n :param shell_based: whether shell-based or ellipsoid-based algorithm should be run\n :type shell_based: boolean\n :return: d, q, s, eigframe, centers, masses, l_succeed: list of object indices for which morphology could be determined at R200 (length: N3)\n :rtype: (N3, ``D_BINS`` + 1) floats (for d, q, s, eigframe (x3)), (N3, 3) floats (for centers), (N3,) floats (for masses), N3-list of ints for l_succeed\n "; +static PyMethodDef __pyx_mdef_11shape_profs_17shape_profs_algos_5calcMorphLocalVelDisp = {"calcMorphLocalVelDisp", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11shape_profs_17shape_profs_algos_5calcMorphLocalVelDisp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11shape_profs_17shape_profs_algos_4calcMorphLocalVelDisp}; +static PyObject *__pyx_pw_11shape_profs_17shape_profs_algos_5calcMorphLocalVelDisp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vxyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_cat = 0; + CYTHON_UNUSED float __pyx_v_L_BOX; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED int __pyx_v_D_LOGSTART; + CYTHON_UNUSED int __pyx_v_D_LOGEND; + CYTHON_UNUSED int __pyx_v_D_BINS; + CYTHON_UNUSED int __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED PyObject *__pyx_v_CENTER = 0; + CYTHON_UNUSED int __pyx_v_reduced; + CYTHON_UNUSED int __pyx_v_shell_based; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMorphLocalVelDisp (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_vxyz,&__pyx_n_s_masses,&__pyx_n_s_r200,&__pyx_n_s_cat,&__pyx_n_s_L_BOX,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_D_LOGSTART,&__pyx_n_s_D_LOGEND,&__pyx_n_s_D_BINS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_CENTER,&__pyx_n_s_reduced,&__pyx_n_s_shell_based,0}; + PyObject* values[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15); + CYTHON_FALLTHROUGH; + case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + CYTHON_FALLTHROUGH; + case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + CYTHON_FALLTHROUGH; + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_vxyz)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 1); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 2); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 3); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 4); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 5); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 6); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGSTART)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 7); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_LOGEND)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 8); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D_BINS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 9); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 10); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 11); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 12); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 13: + if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 13); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 14: + if (likely((values[14] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 14); __PYX_ERR(0, 303, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 15: + if (likely((values[15] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shell_based)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, 15); __PYX_ERR(0, 303, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcMorphLocalVelDisp") < 0)) __PYX_ERR(0, 303, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 16) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + values[13] = PyTuple_GET_ITEM(__pyx_args, 13); + values[14] = PyTuple_GET_ITEM(__pyx_args, 14); + values[15] = PyTuple_GET_ITEM(__pyx_args, 15); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_vxyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_vxyz.memview)) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_r200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r200.memview)) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_cat = values[4]; + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_D_LOGSTART = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_D_LOGSTART == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_D_LOGEND = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_D_LOGEND == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_D_BINS = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_D_BINS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_M_TOL = __Pyx_PyInt_As_int(values[10]); if (unlikely((__pyx_v_M_TOL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[11]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[12]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[13]); + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[14]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_v_shell_based = __Pyx_PyObject_IsTrue(values[15]); if (unlikely((__pyx_v_shell_based == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 303, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcMorphLocalVelDisp", 1, 16, 16, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 303, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("shape_profs.shape_profs_algos.calcMorphLocalVelDisp", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 303, __pyx_L1_error) + __pyx_r = __pyx_pf_11shape_profs_17shape_profs_algos_4calcMorphLocalVelDisp(__pyx_self, __pyx_v_xyz, __pyx_v_vxyz, __pyx_v_masses, __pyx_v_r200, __pyx_v_cat, __pyx_v_L_BOX, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_D_LOGSTART, __pyx_v_D_LOGEND, __pyx_v_D_BINS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_CENTER, __pyx_v_reduced, __pyx_v_shell_based); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11shape_profs_17shape_profs_algos_4calcMorphLocalVelDisp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200, CYTHON_UNUSED PyObject *__pyx_v_cat, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED int __pyx_v_D_LOGSTART, CYTHON_UNUSED int __pyx_v_D_LOGEND, CYTHON_UNUSED int __pyx_v_D_BINS, CYTHON_UNUSED int __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CENTER, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMorphLocalVelDisp", 0); + + /* "shape_profs/shape_profs_algos.pyx":346 + * :rtype: (N3, ``D_BINS`` + 1) floats (for d, q, s, eigframe (x3)), (N3, 3) floats (for centers), (N3,) floats (for masses), N3-list of ints for l_succeed + * """ + * return # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":303 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphLocalVelDisp(float[:,:] xyz, float[:,:] vxyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, int M_TOL, int N_WALL, int N_MIN, str CENTER, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Calculates the local velocity dispersion shape catalogue + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_vxyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r200, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "shape_profs/shape_profs_algos.pyx":350 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphGlobalVelDisp(float[:,:] xyz, float[:,:] vxyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int M_TOL, int N_WALL, int N_MIN, str CENTER, float SAFE, bint reduced): # <<<<<<<<<<<<<< + * """ Calculates the global velocity dipsersion shape catalogue + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11shape_profs_17shape_profs_algos_7calcMorphGlobalVelDisp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_11shape_profs_17shape_profs_algos_6calcMorphGlobalVelDisp[] = "calcMorphGlobalVelDisp(float[:, :] xyz, float[:, :] vxyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int M_TOL, int N_WALL, int N_MIN, unicode CENTER, float SAFE, bool reduced)\n Calculates the global velocity dipsersion shape catalogue\n \n Calls ``calcObjMorphGlobalVelDisp()`` in a parallelized manner.\n\n Calculates the overall axis ratios and eigenframe for each object.\n \n :param xyz: positions of all (DM or star) particles in simulation box\n :type xyz: (N2 x 3) floats\n :param vxyz: velocities of all (DM or star) particles in simulation box\n :type vxyz: (N2 x 3) floats\n :param cat: each entry of the list is a list containing indices of particles belonging to an object\n :type cat: list of length N2\n :param masses: masses of the particles expressed in unit mass\n :type masses: (N2 x 1) floats\n :param r200: R_200 radii of the parent halos\n :type r200: (N1,) floats\n :param L_BOX: simulation box side length\n :type L_BOX: float, units: Mpc/h\n :param MIN_NUMBER_PTCS: minimum number of particles for object to qualify for morphology calculation\n :type MIN_NUMBER_PTCS: int\n :param M_TOL: convergence tolerance, eigenvalue fractions must differ by less than ``M_TOL``\n for iteration to stop\n :type M_TOL: float\n :param N_WALL: maximum permissible number of iterations\n :type N_WALL: float\n :param N_MIN: minimum number of particles (DM or star particle) in any iteration; \n if undercut, shape is unclassified\n :type N_MIN: int\n :param CENTER: shape quantities will be calculated with respect to CENTER = 'mode' (point of highest density)\n or 'com' (center of mass) of each halo\n :type CENTER: str\n :param SAFE: ellipsoidal radius will be maxdist(COM,point)+SAFE where point is any point in the point cloud. \n The larger the better.\n :type SAFE: float\n :param reduced: whether or not reduced shape tensor (1/r^2 factor)""\n :type reduced: boolean\n :return: d, q, s, eigframe, centers, masses\n :rtype: (N3, ``D_BINS`` + 1) floats (for d, q, s, eigframe (x3)), (N3, 3) floats (for centers), (N3,) floats (for masses)\n "; +static PyMethodDef __pyx_mdef_11shape_profs_17shape_profs_algos_7calcMorphGlobalVelDisp = {"calcMorphGlobalVelDisp", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11shape_profs_17shape_profs_algos_7calcMorphGlobalVelDisp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11shape_profs_17shape_profs_algos_6calcMorphGlobalVelDisp}; +static PyObject *__pyx_pw_11shape_profs_17shape_profs_algos_7calcMorphGlobalVelDisp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vxyz = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED PyObject *__pyx_v_cat = 0; + CYTHON_UNUSED float __pyx_v_L_BOX; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS; + CYTHON_UNUSED int __pyx_v_M_TOL; + CYTHON_UNUSED int __pyx_v_N_WALL; + CYTHON_UNUSED int __pyx_v_N_MIN; + CYTHON_UNUSED PyObject *__pyx_v_CENTER = 0; + CYTHON_UNUSED float __pyx_v_SAFE; + CYTHON_UNUSED int __pyx_v_reduced; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMorphGlobalVelDisp (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xyz,&__pyx_n_s_vxyz,&__pyx_n_s_masses,&__pyx_n_s_r200,&__pyx_n_s_cat,&__pyx_n_s_L_BOX,&__pyx_n_s_MIN_NUMBER_PTCS,&__pyx_n_s_M_TOL,&__pyx_n_s_N_WALL,&__pyx_n_s_N_MIN,&__pyx_n_s_CENTER,&__pyx_n_s_SAFE,&__pyx_n_s_reduced,0}; + PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + CYTHON_FALLTHROUGH; + case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + CYTHON_FALLTHROUGH; + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_xyz)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_vxyz)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 1); __PYX_ERR(0, 350, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 2); __PYX_ERR(0, 350, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 3); __PYX_ERR(0, 350, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 4); __PYX_ERR(0, 350, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_L_BOX)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 5); __PYX_ERR(0, 350, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 6); __PYX_ERR(0, 350, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_M_TOL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 7); __PYX_ERR(0, 350, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_WALL)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 8); __PYX_ERR(0, 350, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N_MIN)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 9); __PYX_ERR(0, 350, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 10: + if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CENTER)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 10); __PYX_ERR(0, 350, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 11: + if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_SAFE)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 11); __PYX_ERR(0, 350, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 12: + if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reduced)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, 12); __PYX_ERR(0, 350, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcMorphGlobalVelDisp") < 0)) __PYX_ERR(0, 350, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 13) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + values[11] = PyTuple_GET_ITEM(__pyx_args, 11); + values[12] = PyTuple_GET_ITEM(__pyx_args, 12); + } + __pyx_v_xyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_xyz.memview)) __PYX_ERR(0, 350, __pyx_L3_error) + __pyx_v_vxyz = __Pyx_PyObject_to_MemoryviewSlice_dsds_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_vxyz.memview)) __PYX_ERR(0, 350, __pyx_L3_error) + __pyx_v_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_masses.memview)) __PYX_ERR(0, 350, __pyx_L3_error) + __pyx_v_r200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_r200.memview)) __PYX_ERR(0, 350, __pyx_L3_error) + __pyx_v_cat = values[4]; + __pyx_v_L_BOX = __pyx_PyFloat_AsFloat(values[5]); if (unlikely((__pyx_v_L_BOX == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 350, __pyx_L3_error) + __pyx_v_MIN_NUMBER_PTCS = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_MIN_NUMBER_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 350, __pyx_L3_error) + __pyx_v_M_TOL = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_M_TOL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 350, __pyx_L3_error) + __pyx_v_N_WALL = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_N_WALL == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 350, __pyx_L3_error) + __pyx_v_N_MIN = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_N_MIN == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 350, __pyx_L3_error) + __pyx_v_CENTER = ((PyObject*)values[10]); + __pyx_v_SAFE = __pyx_PyFloat_AsFloat(values[11]); if (unlikely((__pyx_v_SAFE == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 350, __pyx_L3_error) + __pyx_v_reduced = __Pyx_PyObject_IsTrue(values[12]); if (unlikely((__pyx_v_reduced == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 350, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcMorphGlobalVelDisp", 1, 13, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 350, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("shape_profs.shape_profs_algos.calcMorphGlobalVelDisp", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_CENTER), (&PyUnicode_Type), 1, "CENTER", 1))) __PYX_ERR(0, 350, __pyx_L1_error) + __pyx_r = __pyx_pf_11shape_profs_17shape_profs_algos_6calcMorphGlobalVelDisp(__pyx_self, __pyx_v_xyz, __pyx_v_vxyz, __pyx_v_masses, __pyx_v_r200, __pyx_v_cat, __pyx_v_L_BOX, __pyx_v_MIN_NUMBER_PTCS, __pyx_v_M_TOL, __pyx_v_N_WALL, __pyx_v_N_MIN, __pyx_v_CENTER, __pyx_v_SAFE, __pyx_v_reduced); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11shape_profs_17shape_profs_algos_6calcMorphGlobalVelDisp(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r200, CYTHON_UNUSED PyObject *__pyx_v_cat, CYTHON_UNUSED float __pyx_v_L_BOX, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_PTCS, CYTHON_UNUSED int __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED PyObject *__pyx_v_CENTER, CYTHON_UNUSED float __pyx_v_SAFE, CYTHON_UNUSED int __pyx_v_reduced) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcMorphGlobalVelDisp", 0); + + /* "shape_profs/shape_profs_algos.pyx":389 + * :rtype: (N3, ``D_BINS`` + 1) floats (for d, q, s, eigframe (x3)), (N3, 3) floats (for centers), (N3,) floats (for masses) + * """ + * return # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":350 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphGlobalVelDisp(float[:,:] xyz, float[:,:] vxyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int M_TOL, int N_WALL, int N_MIN, str CENTER, float SAFE, bint reduced): # <<<<<<<<<<<<<< + * """ Calculates the global velocity dipsersion shape catalogue + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_xyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_vxyz, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_masses, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_r200, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "shape_profs/shape_profs_algos.pyx":392 + * + * @cython.embedsignature(True) + * cdef float[:,:] calcObjMorphLocal(float[:,:] morph_info, float r200, float[:] log_d, float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, int[:] shell, float[:] r_ell, float[:] center, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float M_TOL, int N_WALL, int N_MIN, bint reduced, bint shell_based) nogil: # <<<<<<<<<<<<<< + * """ Calculates the local axis ratios + * + */ + +static __Pyx_memviewslice __pyx_f_11shape_profs_17shape_profs_algos_calcObjMorphLocal(__Pyx_memviewslice __pyx_v_morph_info, CYTHON_UNUSED float __pyx_v_r200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_log_d, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r_ell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shape_tensor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigval, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigvec, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } }; + + /* "shape_profs/shape_profs_algos.pyx":439 + * :return: ``morph_info`` containing d, q, s, eigframe info in each column, for each ellipsoidal radius + * :rtype: (12,N) float array""" + * return morph_info # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __PYX_INC_MEMVIEW(&__pyx_v_morph_info, 1); + __pyx_r = __pyx_v_morph_info; + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":392 + * + * @cython.embedsignature(True) + * cdef float[:,:] calcObjMorphLocal(float[:,:] morph_info, float r200, float[:] log_d, float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, int[:] shell, float[:] r_ell, float[:] center, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float M_TOL, int N_WALL, int N_MIN, bint reduced, bint shell_based) nogil: # <<<<<<<<<<<<<< + * """ Calculates the local axis ratios + * + */ + + /* function exit code */ + __pyx_L0:; + if (unlikely(!__pyx_r.memview)) { + PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized"); + } + return __pyx_r; +} + +/* "shape_profs/shape_profs_algos.pyx":442 + * + * @cython.embedsignature(True) + * cdef float[:] calcObjMorphGlobal(float[:] morph_info, float r200, float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, int[:] ellipsoid, float[:] r_ell, float[:] center, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float M_TOL, int N_WALL, int N_MIN, float SAFE, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ Calculates the global axis ratios and eigenframe of the point cloud + * + */ + +static __Pyx_memviewslice __pyx_f_11shape_profs_17shape_profs_algos_calcObjMorphGlobal(__Pyx_memviewslice __pyx_v_morph_info, CYTHON_UNUSED float __pyx_v_r200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ellipsoid, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r_ell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shape_tensor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigval, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigvec, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED float __pyx_v_SAFE, CYTHON_UNUSED int __pyx_v_reduced) { + __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } }; + + /* "shape_profs/shape_profs_algos.pyx":484 + * :return: ``morph_info`` containing d, q, s, eigframe info + * :rtype: (12,) float array""" + * return morph_info # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __PYX_INC_MEMVIEW(&__pyx_v_morph_info, 1); + __pyx_r = __pyx_v_morph_info; + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":442 + * + * @cython.embedsignature(True) + * cdef float[:] calcObjMorphGlobal(float[:] morph_info, float r200, float[:,:] xyz, float[:,:] xyz_princ, float[:] masses, int[:] ellipsoid, float[:] r_ell, float[:] center, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float M_TOL, int N_WALL, int N_MIN, float SAFE, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ Calculates the global axis ratios and eigenframe of the point cloud + * + */ + + /* function exit code */ + __pyx_L0:; + if (unlikely(!__pyx_r.memview)) { + PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized"); + } + return __pyx_r; +} + +/* "shape_profs/shape_profs_algos.pyx":487 + * + * @cython.embedsignature(True) + * cdef float[:,:] calcObjMorphLocalVelDisp(float[:,:] morph_info, float r200, float[:] log_d, float[:,:] xyz, float[:,:] vxyz, float[:,:] xyz_princ, float[:] masses, int[:] shell, float[:] r_ell, float[:] center, float[:] vcenter, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float M_TOL, int N_WALL, int N_MIN, bint reduced, bint shell_based) nogil: # <<<<<<<<<<<<<< + * """ Calculates the local axis ratios of the velocity dispersion tensor + * + */ + +static __Pyx_memviewslice __pyx_f_11shape_profs_17shape_profs_algos_calcObjMorphLocalVelDisp(__Pyx_memviewslice __pyx_v_morph_info, CYTHON_UNUSED float __pyx_v_r200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_log_d, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r_ell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vcenter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shape_tensor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigval, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigvec, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED int __pyx_v_reduced, CYTHON_UNUSED int __pyx_v_shell_based) { + __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } }; + + /* "shape_profs/shape_profs_algos.pyx":538 + * :return: ``morph_info`` containing d (= ``r200``), q, s, eigframe info + * :rtype: (12,) float array""" + * return morph_info # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __PYX_INC_MEMVIEW(&__pyx_v_morph_info, 1); + __pyx_r = __pyx_v_morph_info; + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":487 + * + * @cython.embedsignature(True) + * cdef float[:,:] calcObjMorphLocalVelDisp(float[:,:] morph_info, float r200, float[:] log_d, float[:,:] xyz, float[:,:] vxyz, float[:,:] xyz_princ, float[:] masses, int[:] shell, float[:] r_ell, float[:] center, float[:] vcenter, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float M_TOL, int N_WALL, int N_MIN, bint reduced, bint shell_based) nogil: # <<<<<<<<<<<<<< + * """ Calculates the local axis ratios of the velocity dispersion tensor + * + */ + + /* function exit code */ + __pyx_L0:; + if (unlikely(!__pyx_r.memview)) { + PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized"); + } + return __pyx_r; +} + +/* "shape_profs/shape_profs_algos.pyx":541 + * + * @cython.embedsignature(True) + * cdef float[:] calcObjMorphGlobalVelDisp(float[:] morph_info, float r200, float[:,:] xyz, float[:,:] vxyz, float[:,:] xyz_princ, float[:] masses, int[:] ellipsoid, float[:] r_ell, float[:] center, float[:] vcenter, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float M_TOL, int N_WALL, int N_MIN, float SAFE, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ Calculates the global axis ratios and eigenframe of the velocity dispersion tensor + * + */ + +static __Pyx_memviewslice __pyx_f_11shape_profs_17shape_profs_algos_calcObjMorphGlobalVelDisp(__Pyx_memviewslice __pyx_v_morph_info, CYTHON_UNUSED float __pyx_v_r200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vxyz, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_xyz_princ, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_masses, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_ellipsoid, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_r_ell, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_center, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_vcenter, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_shape_tensor, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigval, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_eigvec, CYTHON_UNUSED float __pyx_v_M_TOL, CYTHON_UNUSED int __pyx_v_N_WALL, CYTHON_UNUSED int __pyx_v_N_MIN, CYTHON_UNUSED float __pyx_v_SAFE, CYTHON_UNUSED int __pyx_v_reduced) { + __Pyx_memviewslice __pyx_r = { 0, 0, { 0 }, { 0 }, { 0 } }; + + /* "shape_profs/shape_profs_algos.pyx":591 + * :return: ``morph_info`` containing d (= ``r200``), q, s, eigframe info + * :rtype: (12,) float array""" + * return morph_info # <<<<<<<<<<<<<< + */ + __PYX_INC_MEMVIEW(&__pyx_v_morph_info, 1); + __pyx_r = __pyx_v_morph_info; + goto __pyx_L0; + + /* "shape_profs/shape_profs_algos.pyx":541 + * + * @cython.embedsignature(True) + * cdef float[:] calcObjMorphGlobalVelDisp(float[:] morph_info, float r200, float[:,:] xyz, float[:,:] vxyz, float[:,:] xyz_princ, float[:] masses, int[:] ellipsoid, float[:] r_ell, float[:] center, float[:] vcenter, complex[::1,:] shape_tensor, double[::1] eigval, complex[::1,:] eigvec, float M_TOL, int N_WALL, int N_MIN, float SAFE, bint reduced) nogil: # <<<<<<<<<<<<<< + * """ Calculates the global axis ratios and eigenframe of the velocity dispersion tensor + * + */ + + /* function exit code */ + __pyx_L0:; + if (unlikely(!__pyx_r.memview)) { + PyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized"); + } + return __pyx_r; +} + +/* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + +/* Python wrapper */ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_shape = 0; + Py_ssize_t __pyx_v_itemsize; + PyObject *__pyx_v_format = 0; + PyObject *__pyx_v_mode = 0; + int __pyx_v_allocate_buffer; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[3] = ((PyObject *)__pyx_n_s_c); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(1, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(1, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 122, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_shape = ((PyObject*)values[0]); + __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 122, __pyx_L3_error) + __pyx_v_format = values[2]; + __pyx_v_mode = values[3]; + if (values[4]) { + __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 123, __pyx_L3_error) + } else { + + /* "View.MemoryView":123 + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, + * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< + * + * cdef int idx + */ + __pyx_v_allocate_buffer = ((int)1); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 122, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(1, 122, __pyx_L1_error) + if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { + PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(1, 122, __pyx_L1_error) + } + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + int __pyx_v_idx; + Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_dim; + PyObject **__pyx_v_p; + char __pyx_v_order; + int __pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + char *__pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + Py_ssize_t __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + __Pyx_INCREF(__pyx_v_format); + + /* "View.MemoryView":129 + * cdef PyObject **p + * + * self.ndim = len(shape) # <<<<<<<<<<<<<< + * self.itemsize = itemsize + * + */ + if (unlikely(__pyx_v_shape == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 129, __pyx_L1_error) + } + __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(1, 129, __pyx_L1_error) + __pyx_v_self->ndim = ((int)__pyx_t_1); + + /* "View.MemoryView":130 + * + * self.ndim = len(shape) + * self.itemsize = itemsize # <<<<<<<<<<<<<< + * + * if not self.ndim: + */ + __pyx_v_self->itemsize = __pyx_v_itemsize; + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 133, __pyx_L1_error) + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + } + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 136, __pyx_L1_error) + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + } + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + __pyx_t_2 = PyBytes_Check(__pyx_v_format); + __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":139 + * + * if not isinstance(format, bytes): + * format = format.encode('ASCII') # <<<<<<<<<<<<<< + * self._format = format # keep a reference to the byte string + * self.format = self._format + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + if (CYTHON_UNPACK_METHODS && likely(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_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + } + + /* "View.MemoryView":140 + * if not isinstance(format, bytes): + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< + * self.format = self._format + * + */ + if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(1, 140, __pyx_L1_error) + __pyx_t_3 = __pyx_v_format; + __Pyx_INCREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_v_self->_format); + __Pyx_DECREF(__pyx_v_self->_format); + __pyx_v_self->_format = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":141 + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + * self.format = self._format # <<<<<<<<<<<<<< + * + * + */ + if (unlikely(__pyx_v_self->_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); + __PYX_ERR(1, 141, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(1, 141, __pyx_L1_error) + __pyx_v_self->format = __pyx_t_7; + + /* "View.MemoryView":144 + * + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< + * self._strides = self._shape + self.ndim + * + */ + __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); + + /* "View.MemoryView":145 + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) + * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< + * + * if not self._shape: + */ + __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 148, __pyx_L1_error) + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + } + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + __pyx_t_8 = 0; + __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; + for (;;) { + if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(1, 151, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 151, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_9; + __pyx_v_idx = __pyx_t_8; + __pyx_t_8 = (__pyx_t_8 + 1); + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + __pyx_t_4 = ((__pyx_v_dim <= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":153 + * for idx, dim in enumerate(shape): + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) # <<<<<<<<<<<<<< + * self._shape[idx] = dim + * + */ + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6); + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 153, __pyx_L1_error) + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + } + + /* "View.MemoryView":154 + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim # <<<<<<<<<<<<<< + * + * cdef char order + */ + (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 157, __pyx_L1_error) + if (__pyx_t_4) { + + /* "View.MemoryView":158 + * cdef char order + * if mode == 'fortran': + * order = b'F' # <<<<<<<<<<<<<< + * self.mode = u'fortran' + * elif mode == 'c': + */ + __pyx_v_order = 'F'; + + /* "View.MemoryView":159 + * if mode == 'fortran': + * order = b'F' + * self.mode = u'fortran' # <<<<<<<<<<<<<< + * elif mode == 'c': + * order = b'C' + */ + __Pyx_INCREF(__pyx_n_u_fortran); + __Pyx_GIVEREF(__pyx_n_u_fortran); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_fortran; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 160, __pyx_L1_error) + if (likely(__pyx_t_4)) { + + /* "View.MemoryView":161 + * self.mode = u'fortran' + * elif mode == 'c': + * order = b'C' # <<<<<<<<<<<<<< + * self.mode = u'c' + * else: + */ + __pyx_v_order = 'C'; + + /* "View.MemoryView":162 + * elif mode == 'c': + * order = b'C' + * self.mode = u'c' # <<<<<<<<<<<<<< + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + */ + __Pyx_INCREF(__pyx_n_u_c); + __Pyx_GIVEREF(__pyx_n_u_c); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_c; + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":164 + * self.mode = u'c' + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) # <<<<<<<<<<<<<< + * + * self.len = fill_contig_strides_array(self._shape, self._strides, + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 164, __pyx_L1_error) + } + __pyx_L10:; + + /* "View.MemoryView":166 + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + * + * self.len = fill_contig_strides_array(self._shape, self._strides, # <<<<<<<<<<<<<< + * itemsize, self.ndim, order) + * + */ + __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); + + /* "View.MemoryView":169 + * itemsize, self.ndim, order) + * + * self.free_data = allocate_buffer # <<<<<<<<<<<<<< + * self.dtype_is_object = format == b'O' + * if allocate_buffer: + */ + __pyx_v_self->free_data = __pyx_v_allocate_buffer; + + /* "View.MemoryView":170 + * + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< + * if allocate_buffer: + * + */ + __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 170, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 170, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_v_self->dtype_is_object = __pyx_t_4; + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_4 = (__pyx_v_allocate_buffer != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":174 + * + * + * self.data = malloc(self.len) # <<<<<<<<<<<<<< + * if not self.data: + * raise MemoryError("unable to allocate array data.") + */ + __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 176, __pyx_L1_error) + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":179 + * + * if self.dtype_is_object: + * p = self.data # <<<<<<<<<<<<<< + * for i in range(self.len / itemsize): + * p[i] = Py_None + */ + __pyx_v_p = ((PyObject **)__pyx_v_self->data); + + /* "View.MemoryView":180 + * if self.dtype_is_object: + * p = self.data + * for i in range(self.len / itemsize): # <<<<<<<<<<<<<< + * p[i] = Py_None + * Py_INCREF(Py_None) + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 180, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 180, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize); + __pyx_t_9 = __pyx_t_1; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "View.MemoryView":181 + * p = self.data + * for i in range(self.len / itemsize): + * p[i] = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + (__pyx_v_p[__pyx_v_i]) = Py_None; + + /* "View.MemoryView":182 + * for i in range(self.len / itemsize): + * p[i] = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + Py_INCREF(Py_None); + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + } + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_format); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __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)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + int __pyx_v_bufmode; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + char *__pyx_t_4; + Py_ssize_t __pyx_t_5; + int __pyx_t_6; + Py_ssize_t *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":186 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 # <<<<<<<<<<<<<< + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = -1; + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 187, __pyx_L1_error) + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":188 + * cdef int bufmode = -1 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + goto __pyx_L3; + } + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 189, __pyx_L1_error) + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":190 + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + */ + __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + } + __pyx_L3:; + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 192, __pyx_L1_error) + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + } + + /* "View.MemoryView":193 + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data # <<<<<<<<<<<<<< + * info.len = self.len + * info.ndim = self.ndim + */ + __pyx_t_4 = __pyx_v_self->data; + __pyx_v_info->buf = __pyx_t_4; + + /* "View.MemoryView":194 + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + * info.len = self.len # <<<<<<<<<<<<<< + * info.ndim = self.ndim + * info.shape = self._shape + */ + __pyx_t_5 = __pyx_v_self->len; + __pyx_v_info->len = __pyx_t_5; + + /* "View.MemoryView":195 + * info.buf = self.data + * info.len = self.len + * info.ndim = self.ndim # <<<<<<<<<<<<<< + * info.shape = self._shape + * info.strides = self._strides + */ + __pyx_t_6 = __pyx_v_self->ndim; + __pyx_v_info->ndim = __pyx_t_6; + + /* "View.MemoryView":196 + * info.len = self.len + * info.ndim = self.ndim + * info.shape = self._shape # <<<<<<<<<<<<<< + * info.strides = self._strides + * info.suboffsets = NULL + */ + __pyx_t_7 = __pyx_v_self->_shape; + __pyx_v_info->shape = __pyx_t_7; + + /* "View.MemoryView":197 + * info.ndim = self.ndim + * info.shape = self._shape + * info.strides = self._strides # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = self.itemsize + */ + __pyx_t_7 = __pyx_v_self->_strides; + __pyx_v_info->strides = __pyx_t_7; + + /* "View.MemoryView":198 + * info.shape = self._shape + * info.strides = self._strides + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = self.itemsize + * info.readonly = 0 + */ + __pyx_v_info->suboffsets = NULL; + + /* "View.MemoryView":199 + * info.strides = self._strides + * info.suboffsets = NULL + * info.itemsize = self.itemsize # <<<<<<<<<<<<<< + * info.readonly = 0 + * + */ + __pyx_t_5 = __pyx_v_self->itemsize; + __pyx_v_info->itemsize = __pyx_t_5; + + /* "View.MemoryView":200 + * info.suboffsets = NULL + * info.itemsize = self.itemsize + * info.readonly = 0 # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + __pyx_v_info->readonly = 0; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":203 + * + * if flags & PyBUF_FORMAT: + * info.format = self.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_4 = __pyx_v_self->format; + __pyx_v_info->format = __pyx_t_4; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":205 + * info.format = self.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.obj = self + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L5:; + + /* "View.MemoryView":207 + * info.format = NULL + * + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + +/* Python wrapper */ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":213 + * def __dealloc__(array self): + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) # <<<<<<<<<<<<<< + * elif self.free_data: + * if self.dtype_is_object: + */ + __pyx_v_self->callback_free_data(__pyx_v_self->data); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + __pyx_t_1 = (__pyx_v_self->free_data != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":216 + * elif self.free_data: + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, # <<<<<<<<<<<<<< + * self._strides, self.ndim, False) + * free(self.data) + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + } + + /* "View.MemoryView":218 + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + * free(self.data) # <<<<<<<<<<<<<< + * PyObject_Free(self._shape) + * + */ + free(__pyx_v_self->data); + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + } + __pyx_L3:; + + /* "View.MemoryView":219 + * self._strides, self.ndim, False) + * free(self.data) + * PyObject_Free(self._shape) # <<<<<<<<<<<<<< + * + * @property + */ + PyObject_Free(__pyx_v_self->_shape); + + /* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__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("__get__", 0); + + /* "View.MemoryView":223 + * @property + * def memview(self): + * return self.get_memview() # <<<<<<<<<<<<<< + * + * @cname('get_memview') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) { + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_memview", 0); + + /* "View.MemoryView":227 + * @cname('get_memview') + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< + * return memoryview(self, flags, self.dtype_is_object) + * + */ + __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); + + /* "View.MemoryView":228 + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":231 + * + * def __len__(self): + * return self._shape[0] # <<<<<<<<<<<<<< + * + * def __getattr__(self, attr): + */ + __pyx_r = (__pyx_v_self->_shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getattr__", 0); + + /* "View.MemoryView":234 + * + * def __getattr__(self, attr): + * return getattr(self.memview, attr) # <<<<<<<<<<<<<< + * + * def __getitem__(self, item): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":237 + * + * def __getitem__(self, item): + * return self.memview[item] # <<<<<<<<<<<<<< + * + * def __setitem__(self, item, value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + +/* Python wrapper */ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + + /* "View.MemoryView":240 + * + * def __setitem__(self, item, value): + * self.memview[item] = value # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(1, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + +static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) { + struct __pyx_array_obj *__pyx_v_result = 0; + struct __pyx_array_obj *__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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("array_cwrapper", 0); + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":249 + * + * if buf == NULL: + * result = array(shape, itemsize, format, mode.decode('ASCII')) # <<<<<<<<<<<<<< + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4); + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + /*else*/ { + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":252 + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) # <<<<<<<<<<<<<< + * result.data = buf + * + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(1, 252, __pyx_L1_error) + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __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_v_result = ((struct __pyx_array_obj *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "View.MemoryView":253 + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) + * result.data = buf # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->data = __pyx_v_buf; + } + __pyx_L3:; + + /* "View.MemoryView":255 + * result.data = buf + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + + /* 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("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + +/* Python wrapper */ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_name = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0}; + PyObject* values[1] = {0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(1, 281, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + } + __pyx_v_name = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 281, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 0); + + /* "View.MemoryView":282 + * cdef object name + * def __init__(self, name): + * self.name = name # <<<<<<<<<<<<<< + * def __repr__(self): + * return self.name + */ + __Pyx_INCREF(__pyx_v_name); + __Pyx_GIVEREF(__pyx_v_name); + __Pyx_GOTREF(__pyx_v_self->name); + __Pyx_DECREF(__pyx_v_self->name); + __pyx_v_self->name = __pyx_v_name; + + /* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + +/* Python wrapper */ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":284 + * self.name = name + * def __repr__(self): + * return self.name # <<<<<<<<<<<<<< + * + * cdef generic = Enum("") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->name); + __pyx_r = __pyx_v_self->name; + goto __pyx_L0; + + /* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + + /* function exit code */ + __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___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__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; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.name,) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_self->name); + __Pyx_GIVEREF(__pyx_v_self->name); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); + __pyx_v_state = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":7 + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_2 = (__pyx_v__dict != Py_None); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); + __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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.name is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.name,) + * _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.name is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_self->name != Py_None); + __pyx_v_use_setstate = __pyx_t_3; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + __pyx_t_3 = (__pyx_v_use_setstate != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":13 + * use_setstate = self.name is not None + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __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_5); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __pyx_t_5 = 0; + __pyx_t_1 = 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_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.Enum.__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_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__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__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_unpickle_Enum__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_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__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("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + +static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) { + Py_intptr_t __pyx_v_aligned_p; + size_t __pyx_v_offset; + void *__pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":300 + * cdef void *align_pointer(void *memory, size_t alignment) nogil: + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory # <<<<<<<<<<<<<< + * cdef size_t offset + * + */ + __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory); + + /* "View.MemoryView":304 + * + * with cython.cdivision(True): + * offset = aligned_p % alignment # <<<<<<<<<<<<<< + * + * if offset > 0: + */ + __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + __pyx_t_1 = ((__pyx_v_offset > 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":307 + * + * if offset > 0: + * aligned_p += alignment - offset # <<<<<<<<<<<<<< + * + * return aligned_p + */ + __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset)); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + } + + /* "View.MemoryView":309 + * aligned_p += alignment - offset + * + * return aligned_p # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((void *)__pyx_v_aligned_p); + goto __pyx_L0; + + /* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + +/* Python wrapper */ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_obj = 0; + int __pyx_v_flags; + int __pyx_v_dtype_is_object; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(1, 345, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 345, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj = values[0]; + __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error) + if (values[2]) { + __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error) + } else { + __pyx_v_dtype_is_object = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 345, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + + /* "View.MemoryView":346 + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj # <<<<<<<<<<<<<< + * self.flags = flags + * if type(self) is memoryview or obj is not None: + */ + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + __Pyx_GOTREF(__pyx_v_self->obj); + __Pyx_DECREF(__pyx_v_self->obj); + __pyx_v_self->obj = __pyx_v_obj; + + /* "View.MemoryView":347 + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj + * self.flags = flags # <<<<<<<<<<<<<< + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + */ + __pyx_v_self->flags = __pyx_v_flags; + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type)); + __pyx_t_3 = (__pyx_t_2 != 0); + if (!__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_obj != Py_None); + __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { + + /* "View.MemoryView":349 + * self.flags = flags + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + */ + __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 349, __pyx_L1_error) + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":351 + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; + + /* "View.MemoryView":352 + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * global __pyx_memoryview_thread_locks_used + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + } + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + } + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":356 + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + */ + __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + + /* "View.MemoryView":357 + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<< + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1); + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":359 + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< + * if self.lock is NULL: + * raise MemoryError + */ + __pyx_v_self->lock = PyThread_allocate_lock(); + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":361 + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + PyErr_NoMemory(); __PYX_ERR(1, 361, __pyx_L1_error) + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + } + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":364 + * + * if flags & PyBUF_FORMAT: + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<< + * else: + * self.dtype_is_object = dtype_is_object + */ + __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_self->dtype_is_object = __pyx_t_1; + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + goto __pyx_L10; + } + + /* "View.MemoryView":366 + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + */ + /*else*/ { + __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; + } + __pyx_L10:; + + /* "View.MemoryView":368 + * self.dtype_is_object = dtype_is_object + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( # <<<<<<<<<<<<<< + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL + */ + __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int)))); + + /* "View.MemoryView":370 + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL # <<<<<<<<<<<<<< + * + * def __dealloc__(memoryview self): + */ + __pyx_v_self->typeinfo = NULL; + + /* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + +/* Python wrapper */ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { + int __pyx_v_i; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyThread_type_lock __pyx_t_6; + PyThread_type_lock __pyx_t_7; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + __pyx_t_1 = (__pyx_v_self->obj != Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":374 + * def __dealloc__(memoryview self): + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + */ + __Pyx_ReleaseBuffer((&__pyx_v_self->view)); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + __pyx_t_2 = ((((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":377 + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<< + * Py_DECREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL; + + /* "View.MemoryView":378 + * + * (<__pyx_buffer *> &self.view).obj = NULL + * Py_DECREF(Py_None) # <<<<<<<<<<<<<< + * + * cdef int i + */ + Py_DECREF(Py_None); + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + } + __pyx_L3:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":383 + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<< + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + */ + __pyx_t_3 = __pyx_memoryview_thread_locks_used; + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":385 + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<< + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1); + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":388 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<< + * break + * else: + */ + __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]); + + /* "View.MemoryView":387 + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break + */ + (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6; + (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7; + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + } + + /* "View.MemoryView":389 + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break # <<<<<<<<<<<<<< + * else: + * PyThread_free_lock(self.lock) + */ + goto __pyx_L6_break; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + } + } + /*else*/ { + + /* "View.MemoryView":391 + * break + * else: + * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + */ + PyThread_free_lock(__pyx_v_self->lock); + } + __pyx_L6_break:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + } + + /* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + Py_ssize_t __pyx_v_dim; + char *__pyx_v_itemp; + PyObject *__pyx_v_idx = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + PyObject *(*__pyx_t_4)(PyObject *); + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + char *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_item_pointer", 0); + + /* "View.MemoryView":395 + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< + * + * for dim, idx in enumerate(index): + */ + __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) { + __pyx_t_2 = __pyx_v_index; __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_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 397, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_4)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) 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(1, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) 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(1, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 397, __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(1, 397, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_1; + __pyx_t_1 = (__pyx_t_1 + 1); + + /* "View.MemoryView":398 + * + * for dim, idx in enumerate(index): + * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< + * + * return itemp + */ + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 398, __pyx_L1_error) + __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(1, 398, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_7; + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":400 + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + * return itemp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_itemp; + goto __pyx_L0; + + /* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_indices = NULL; + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + char *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":405 + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: + * return self # <<<<<<<<<<<<<< + * + * have_slices, indices = _unellipsify(index, self.view.ndim) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __pyx_r = ((PyObject *)__pyx_v_self); + goto __pyx_L0; + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + } + + /* "View.MemoryView":407 + * return self + * + * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * cdef char *itemp + */ + __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (likely(__pyx_t_3 != Py_None)) { + PyObject* sequence = __pyx_t_3; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 407, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 407, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_v_indices = __pyx_t_5; + __pyx_t_5 = 0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 410, __pyx_L1_error) + if (__pyx_t_2) { + + /* "View.MemoryView":411 + * cdef char *itemp + * if have_slices: + * return memview_slice(self, indices) # <<<<<<<<<<<<<< + * else: + * itemp = self.get_item_pointer(indices) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + } + + /* "View.MemoryView":413 + * return memview_slice(self, indices) + * else: + * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< + * return self.convert_item_to_object(itemp) + * + */ + /*else*/ { + __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(1, 413, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_6; + + /* "View.MemoryView":414 + * else: + * itemp = self.get_item_pointer(indices) + * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< + * + * def __setitem__(memoryview self, object index, object value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + +/* Python wrapper */ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_obj = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + __Pyx_INCREF(__pyx_v_index); + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + __pyx_t_1 = (__pyx_v_self->view.readonly != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 418, __pyx_L1_error) + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + } + + /* "View.MemoryView":420 + * raise TypeError("Cannot assign to read-only memoryview") + * + * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * if have_slices: + */ + __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (likely(__pyx_t_2 != Py_None)) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 420, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 420, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_3; + __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 422, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":423 + * + * if have_slices: + * obj = self.is_slice(value) # <<<<<<<<<<<<<< + * if obj: + * self.setitem_slice_assignment(self[index], obj) + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_obj = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 424, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":425 + * obj = self.is_slice(value) + * if obj: + * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< + * else: + * self.setitem_slice_assign_scalar(self[index], value) + */ + __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":427 + * self.setitem_slice_assignment(self[index], obj) + * else: + * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< + * else: + * self.setitem_indexed(index, value) + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(1, 427, __pyx_L1_error) + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L5:; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":429 + * self.setitem_slice_assign_scalar(self[index], value) + * else: + * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< + * + * cdef is_slice(self, obj): + */ + /*else*/ { + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L4:; + + /* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_slice", 0); + __Pyx_INCREF(__pyx_v_obj); + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + /*try:*/ { + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":435 + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) # <<<<<<<<<<<<<< + * except TypeError: + * return None + */ + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 435, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __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; + + /* "View.MemoryView":436 + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + * except TypeError: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); + if (__pyx_t_9) { + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(1, 436, __pyx_L6_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":437 + * self.dtype_is_object) + * except TypeError: + * return None # <<<<<<<<<<<<<< + * + * return obj + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_except_return; + } + goto __pyx_L6_except_error; + __pyx_L6_except_error:; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L1_error; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L0; + __pyx_L9_try_end:; + } + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + } + + /* "View.MemoryView":439 + * return None + * + * return obj # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assignment(self, dst, src): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_obj); + __pyx_r = __pyx_v_obj; + goto __pyx_L0; + + /* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { + __Pyx_memviewslice __pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_src_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + __Pyx_memviewslice *__pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 445, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 445, __pyx_L1_error) + + /* "View.MemoryView":446 + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], # <<<<<<<<<<<<<< + * src.ndim, dst.ndim, self.dtype_is_object) + * + */ + if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 446, __pyx_L1_error) + __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 446, __pyx_L1_error) + + /* "View.MemoryView":447 + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error) + + /* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { + int __pyx_v_array[0x80]; + void *__pyx_v_tmp; + void *__pyx_v_item; + __Pyx_memviewslice *__pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_tmp_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + char const *__pyx_t_6; + PyObject *__pyx_t_7 = NULL; + 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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); + + /* "View.MemoryView":451 + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + * cdef int array[128] + * cdef void *tmp = NULL # <<<<<<<<<<<<<< + * cdef void *item + * + */ + __pyx_v_tmp = NULL; + + /* "View.MemoryView":456 + * cdef __Pyx_memviewslice *dst_slice + * cdef __Pyx_memviewslice tmp_slice + * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< + * + * if self.view.itemsize > sizeof(array): + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 456, __pyx_L1_error) + __pyx_v_dst_slice = __pyx_t_1; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":459 + * + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< + * if tmp == NULL: + * raise MemoryError + */ + __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":461 + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * item = tmp + * else: + */ + PyErr_NoMemory(); __PYX_ERR(1, 461, __pyx_L1_error) + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + } + + /* "View.MemoryView":462 + * if tmp == NULL: + * raise MemoryError + * item = tmp # <<<<<<<<<<<<<< + * else: + * item = array + */ + __pyx_v_item = __pyx_v_tmp; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":464 + * item = tmp + * else: + * item = array # <<<<<<<<<<<<<< + * + * try: + */ + /*else*/ { + __pyx_v_item = ((void *)__pyx_v_array); + } + __pyx_L3:; + + /* "View.MemoryView":466 + * item = array + * + * try: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * ( item)[0] = value + */ + /*try:*/ { + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":468 + * try: + * if self.dtype_is_object: + * ( item)[0] = value # <<<<<<<<<<<<<< + * else: + * self.assign_item_from_object( item, value) + */ + (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":470 + * ( item)[0] = value + * else: + * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 470, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L8:; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":475 + * + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + * item, self.dtype_is_object) + */ + __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 475, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + } + + /* "View.MemoryView":476 + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< + * item, self.dtype_is_object) + * finally: + */ + __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); + } + + /* "View.MemoryView":479 + * item, self.dtype_is_object) + * finally: + * PyMem_Free(tmp) # <<<<<<<<<<<<<< + * + * cdef setitem_indexed(self, index, value): + */ + /*finally:*/ { + /*normal exit:*/{ + PyMem_Free(__pyx_v_tmp); + goto __pyx_L7; + } + __pyx_L6_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __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_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename; + { + PyMem_Free(__pyx_v_tmp); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + } + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6; + goto __pyx_L1_error; + } + __pyx_L7:; + } + + /* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_indexed", 0); + + /* "View.MemoryView":482 + * + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< + * self.assign_item_from_object(itemp, value) + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(1, 482, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_1; + + /* "View.MemoryView":483 + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_v_struct = NULL; + PyObject *__pyx_v_bytesitem = 0; + PyObject *__pyx_v_result = NULL; + 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; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + size_t __pyx_t_10; + int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":488 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef bytes bytesitem + * + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":491 + * cdef bytes bytesitem + * + * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< + * try: + * result = struct.unpack(self.view.format, bytesitem) + */ + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "View.MemoryView":493 + * bytesitem = itemp[:self.view.itemsize] + * try: + * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< + * except struct.error: + * raise ValueError("Unable to convert item to object") + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && 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; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + { + __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + if (__pyx_t_7) { + __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; + } + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6); + __Pyx_INCREF(__pyx_v_bytesitem); + __Pyx_GIVEREF(__pyx_v_bytesitem); + PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem); + __pyx_t_6 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + } + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + /*else:*/ { + __pyx_t_10 = strlen(__pyx_v_self->view.format); + __pyx_t_11 = ((__pyx_t_10 == 1) != 0); + if (__pyx_t_11) { + + /* "View.MemoryView":498 + * else: + * if len(self.view.format) == 1: + * return result[0] # <<<<<<<<<<<<<< + * return result + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 498, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6_except_return; + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + } + + /* "View.MemoryView":499 + * if len(self.view.format) == 1: + * return result[0] + * return result # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "View.MemoryView":494 + * try: + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: # <<<<<<<<<<<<<< + * raise ValueError("Unable to convert item to object") + * else: + */ + __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9); + __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0; + if (__pyx_t_8) { + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_1); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 495, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(1, 495, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesitem); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_v_struct = NULL; + char __pyx_v_c; + PyObject *__pyx_v_bytesvalue = 0; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + char *__pyx_t_11; + char *__pyx_t_12; + char *__pyx_t_13; + char *__pyx_t_14; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":504 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef char c + * cdef bytes bytesvalue + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + __pyx_t_2 = PyTuple_Check(__pyx_v_value); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "View.MemoryView":510 + * + * if isinstance(value, tuple): + * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< + * else: + * bytesvalue = struct.pack(self.view.format, value) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 510, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":512 + * bytesvalue = struct.pack(self.view.format, *value) + * else: + * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< + * + * for i, c in enumerate(bytesvalue): + */ + /*else*/ { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + { + __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (__pyx_t_5) { + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL; + } + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1); + __Pyx_INCREF(__pyx_v_value); + __Pyx_GIVEREF(__pyx_v_value); + PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value); + __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 512, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = 0; + if (unlikely(__pyx_v_bytesvalue == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); + __PYX_ERR(1, 514, __pyx_L1_error) + } + __Pyx_INCREF(__pyx_v_bytesvalue); + __pyx_t_10 = __pyx_v_bytesvalue; + __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10); + __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10)); + for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) { + __pyx_t_11 = __pyx_t_14; + __pyx_v_c = (__pyx_t_11[0]); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + __pyx_v_i = __pyx_t_9; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = (__pyx_t_9 + 1); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; + } + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* 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_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesvalue); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + char *__pyx_t_5; + void *__pyx_t_6; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->view.readonly != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 520, __pyx_L1_error) + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + } + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":523 + * + * if flags & PyBUF_ND: + * info.shape = self.view.shape # <<<<<<<<<<<<<< + * else: + * info.shape = NULL + */ + __pyx_t_4 = __pyx_v_self->view.shape; + __pyx_v_info->shape = __pyx_t_4; + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":525 + * info.shape = self.view.shape + * else: + * info.shape = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_STRIDES: + */ + /*else*/ { + __pyx_v_info->shape = NULL; + } + __pyx_L6:; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":528 + * + * if flags & PyBUF_STRIDES: + * info.strides = self.view.strides # <<<<<<<<<<<<<< + * else: + * info.strides = NULL + */ + __pyx_t_4 = __pyx_v_self->view.strides; + __pyx_v_info->strides = __pyx_t_4; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + goto __pyx_L7; + } + + /* "View.MemoryView":530 + * info.strides = self.view.strides + * else: + * info.strides = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_INDIRECT: + */ + /*else*/ { + __pyx_v_info->strides = NULL; + } + __pyx_L7:; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":533 + * + * if flags & PyBUF_INDIRECT: + * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< + * else: + * info.suboffsets = NULL + */ + __pyx_t_4 = __pyx_v_self->view.suboffsets; + __pyx_v_info->suboffsets = __pyx_t_4; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":535 + * info.suboffsets = self.view.suboffsets + * else: + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + /*else*/ { + __pyx_v_info->suboffsets = NULL; + } + __pyx_L8:; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":538 + * + * if flags & PyBUF_FORMAT: + * info.format = self.view.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_5 = __pyx_v_self->view.format; + __pyx_v_info->format = __pyx_t_5; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":540 + * info.format = self.view.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.buf = self.view.buf + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L9:; + + /* "View.MemoryView":542 + * info.format = NULL + * + * info.buf = self.view.buf # <<<<<<<<<<<<<< + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + */ + __pyx_t_6 = __pyx_v_self->view.buf; + __pyx_v_info->buf = __pyx_t_6; + + /* "View.MemoryView":543 + * + * info.buf = self.view.buf + * info.ndim = self.view.ndim # <<<<<<<<<<<<<< + * info.itemsize = self.view.itemsize + * info.len = self.view.len + */ + __pyx_t_7 = __pyx_v_self->view.ndim; + __pyx_v_info->ndim = __pyx_t_7; + + /* "View.MemoryView":544 + * info.buf = self.view.buf + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< + * info.len = self.view.len + * info.readonly = self.view.readonly + */ + __pyx_t_8 = __pyx_v_self->view.itemsize; + __pyx_v_info->itemsize = __pyx_t_8; + + /* "View.MemoryView":545 + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + * info.len = self.view.len # <<<<<<<<<<<<<< + * info.readonly = self.view.readonly + * info.obj = self + */ + __pyx_t_8 = __pyx_v_self->view.len; + __pyx_v_info->len = __pyx_t_8; + + /* "View.MemoryView":546 + * info.itemsize = self.view.itemsize + * info.len = self.view.len + * info.readonly = self.view.readonly # <<<<<<<<<<<<<< + * info.obj = self + * + */ + __pyx_t_1 = __pyx_v_self->view.readonly; + __pyx_v_info->readonly = __pyx_t_1; + + /* "View.MemoryView":547 + * info.len = self.view.len + * info.readonly = self.view.readonly + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":554 + * @property + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< + * transpose_memslice(&result.from_slice) + * return result + */ + __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(1, 554, __pyx_L1_error) + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":555 + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 555, __pyx_L1_error) + + /* "View.MemoryView":556 + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + * return result # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":560 + * @property + * def base(self): + * return self.obj # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->obj); + __pyx_r = __pyx_v_self->obj; + goto __pyx_L0; + + /* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_length; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":564 + * @property + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_length = (__pyx_t_2[0]); + __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_stride; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 570, __pyx_L1_error) + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + } + + /* "View.MemoryView":572 + * raise ValueError("Buffer view does not expose strides") + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_v_stride = (__pyx_t_3[0]); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + Py_ssize_t *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__12, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + } + + /* "View.MemoryView":579 + * return (-1,) * self.view.ndim + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim); + for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) { + __pyx_t_4 = __pyx_t_6; + __pyx_v_suboffset = (__pyx_t_4[0]); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__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("__get__", 0); + + /* "View.MemoryView":583 + * @property + * def ndim(self): + * return self.view.ndim # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 583, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__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("__get__", 0); + + /* "View.MemoryView":587 + * @property + * def itemsize(self): + * return self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 587, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":591 + * @property + * def nbytes(self): + * return self.size * self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + __pyx_t_1 = (__pyx_v_self->_size == Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":596 + * def size(self): + * if self._size is None: + * result = 1 # <<<<<<<<<<<<<< + * + * for length in self.view.shape[:self.view.ndim]: + */ + __Pyx_INCREF(__pyx_int_1); + __pyx_v_result = __pyx_int_1; + + /* "View.MemoryView":598 + * result = 1 + * + * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<< + * result *= length + * + */ + __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 598, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6); + __pyx_t_6 = 0; + + /* "View.MemoryView":599 + * + * for length in self.view.shape[:self.view.ndim]: + * result *= length # <<<<<<<<<<<<<< + * + * self._size = result + */ + __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6); + __pyx_t_6 = 0; + } + + /* "View.MemoryView":601 + * result *= length + * + * self._size = result # <<<<<<<<<<<<<< + * + * return self._size + */ + __Pyx_INCREF(__pyx_v_result); + __Pyx_GIVEREF(__pyx_v_result); + __Pyx_GOTREF(__pyx_v_self->_size); + __Pyx_DECREF(__pyx_v_self->_size); + __pyx_v_self->_size = __pyx_v_result; + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + } + + /* "View.MemoryView":603 + * self._size = result + * + * return self._size # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->_size); + __pyx_r = __pyx_v_self->_size; + goto __pyx_L0; + + /* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":607 + * def __len__(self): + * if self.view.ndim >= 1: + * return self.view.shape[0] # <<<<<<<<<<<<<< + * + * return 0 + */ + __pyx_r = (__pyx_v_self->view.shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + } + + /* "View.MemoryView":609 + * return self.view.shape[0] + * + * return 0 # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":613 + * def __repr__(self): + * return "" % (self.base.__class__.__name__, + * id(self)) # <<<<<<<<<<<<<< + * + * def __str__(self): + */ + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 613, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__str__", 0); + + /* "View.MemoryView":616 + * + * def __str__(self): + * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __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; + + /* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_c_contig", 0); + + /* "View.MemoryView":622 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 622, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":623 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<< + * + * def is_f_contig(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_f_contig", 0); + + /* "View.MemoryView":628 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 628, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":629 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<< + * + * def copy(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_mslice; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy", 0); + + /* "View.MemoryView":633 + * def copy(self): + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &mslice) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); + + /* "View.MemoryView":635 + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + * + * slice_copy(self, &mslice) # <<<<<<<<<<<<<< + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); + + /* "View.MemoryView":636 + * + * slice_copy(self, &mslice) + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_C_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 636, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":641 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< + * + * def copy_fortran(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy_fortran", 0); + + /* "View.MemoryView":645 + * def copy_fortran(self): + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &src) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); + + /* "View.MemoryView":647 + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + * + * slice_copy(self, &src) # <<<<<<<<<<<<<< + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); + + /* "View.MemoryView":648 + * + * slice_copy(self, &src) + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_F_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 648, __pyx_L1_error) + __pyx_v_dst = __pyx_t_1; + + /* "View.MemoryView":653 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 653, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __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): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + +static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { + struct __pyx_memoryview_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); + + /* "View.MemoryView":658 + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< + * result.typeinfo = typeinfo + * return result + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_o); + __Pyx_GIVEREF(__pyx_v_o); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":659 + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_v_result->typeinfo = __pyx_v_typeinfo; + + /* "View.MemoryView":660 + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_check') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("memoryview_check", 0); + + /* "View.MemoryView":664 + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): + * return isinstance(o, memoryview) # <<<<<<<<<<<<<< + * + * cdef tuple _unellipsify(object index, int ndim): + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); + __pyx_r = __pyx_t_1; + goto __pyx_L0; + + /* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + +static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { + PyObject *__pyx_v_tup = NULL; + PyObject *__pyx_v_result = NULL; + int __pyx_v_have_slices; + int __pyx_v_seen_ellipsis; + CYTHON_UNUSED PyObject *__pyx_v_idx = NULL; + PyObject *__pyx_v_item = NULL; + Py_ssize_t __pyx_v_nslices; + 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)(PyObject *); + PyObject *__pyx_t_7 = NULL; + Py_ssize_t __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_unellipsify", 0); + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + __pyx_t_1 = PyTuple_Check(__pyx_v_index); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":672 + * """ + * if not isinstance(index, tuple): + * tup = (index,) # <<<<<<<<<<<<<< + * else: + * tup = index + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 672, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_index); + __Pyx_GIVEREF(__pyx_v_index); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); + __pyx_v_tup = __pyx_t_3; + __pyx_t_3 = 0; + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":674 + * tup = (index,) + * else: + * tup = index # <<<<<<<<<<<<<< + * + * result = [] + */ + /*else*/ { + __Pyx_INCREF(__pyx_v_index); + __pyx_v_tup = __pyx_v_index; + } + __pyx_L3:; + + /* "View.MemoryView":676 + * tup = index + * + * result = [] # <<<<<<<<<<<<<< + * have_slices = False + * seen_ellipsis = False + */ + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 676, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_result = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":677 + * + * result = [] + * have_slices = False # <<<<<<<<<<<<<< + * seen_ellipsis = False + * for idx, item in enumerate(tup): + */ + __pyx_v_have_slices = 0; + + /* "View.MemoryView":678 + * result = [] + * have_slices = False + * seen_ellipsis = False # <<<<<<<<<<<<<< + * for idx, item in enumerate(tup): + * if item is Ellipsis: + */ + __pyx_v_seen_ellipsis = 0; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + __Pyx_INCREF(__pyx_int_0); + __pyx_t_3 = __pyx_int_0; + if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) { + __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 679, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_4))) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } else { + if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } + } else { + __pyx_t_7 = __pyx_t_6(__pyx_t_4); + if (unlikely(!__pyx_t_7)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 679, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_7); + } + __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_INCREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3); + __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_7; + __pyx_t_7 = 0; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(1, 682, __pyx_L1_error) + __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__15); + __Pyx_GIVEREF(__pyx_slice__15); + PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__15); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":683 + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True # <<<<<<<<<<<<<< + * else: + * result.append(slice(None)) + */ + __pyx_v_seen_ellipsis = 1; + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + goto __pyx_L7; + } + + /* "View.MemoryView":685 + * seen_ellipsis = True + * else: + * result.append(slice(None)) # <<<<<<<<<<<<<< + * have_slices = True + * else: + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__15); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 685, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":686 + * else: + * result.append(slice(None)) + * have_slices = True # <<<<<<<<<<<<<< + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + */ + __pyx_v_have_slices = 1; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + goto __pyx_L6; + } + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + /*else*/ { + __pyx_t_2 = PySlice_Check(__pyx_v_item); + __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0); + __pyx_t_1 = __pyx_t_10; + __pyx_L9_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":689 + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + * raise TypeError("Cannot index with type '%s'" % type(item)) # <<<<<<<<<<<<<< + * + * have_slices = have_slices or isinstance(item, slice) + */ + __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_Raise(__pyx_t_11, 0, 0, 0); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __PYX_ERR(1, 689, __pyx_L1_error) + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + } + + /* "View.MemoryView":691 + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + * have_slices = have_slices or isinstance(item, slice) # <<<<<<<<<<<<<< + * result.append(item) + * + */ + __pyx_t_10 = (__pyx_v_have_slices != 0); + if (!__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = PySlice_Check(__pyx_v_item); + __pyx_t_2 = (__pyx_t_10 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_have_slices = __pyx_t_1; + + /* "View.MemoryView":692 + * + * have_slices = have_slices or isinstance(item, slice) + * result.append(item) # <<<<<<<<<<<<<< + * + * nslices = ndim - len(result) + */ + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 692, __pyx_L1_error) + } + __pyx_L6:; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":694 + * result.append(item) + * + * nslices = ndim - len(result) # <<<<<<<<<<<<<< + * if nslices: + * result.extend([slice(None)] * nslices) + */ + __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 694, __pyx_L1_error) + __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5); + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + __pyx_t_1 = (__pyx_v_nslices != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":696 + * nslices = ndim - len(result) + * if nslices: + * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<< + * + * return have_slices or nslices, tuple(result) + */ + __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__15); + __Pyx_GIVEREF(__pyx_slice__15); + PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__15); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 696, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + } + + /* "View.MemoryView":698 + * result.extend([slice(None)] * nslices) + * + * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + */ + __Pyx_XDECREF(__pyx_r); + if (!__pyx_v_have_slices) { + } else { + __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_L14_bool_binop_done:; + __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_r = ((PyObject*)__pyx_t_11); + __pyx_t_11 = 0; + goto __pyx_L0; + + /* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_tup); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_XDECREF(__pyx_v_item); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + +static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); + + /* "View.MemoryView":701 + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") + */ + __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim); + for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) { + __pyx_t_1 = __pyx_t_3; + __pyx_v_suboffset = (__pyx_t_1[0]); + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __PYX_ERR(1, 703, __pyx_L1_error) + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + } + } + + /* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { + int __pyx_v_new_ndim; + int __pyx_v_suboffset_dim; + int __pyx_v_dim; + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + __Pyx_memviewslice *__pyx_v_p_src; + struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; + __Pyx_memviewslice *__pyx_v_p_dst; + int *__pyx_v_p_suboffset_dim; + Py_ssize_t __pyx_v_start; + Py_ssize_t __pyx_v_stop; + Py_ssize_t __pyx_v_step; + int __pyx_v_have_start; + int __pyx_v_have_stop; + int __pyx_v_have_step; + PyObject *__pyx_v_index = NULL; + struct __pyx_memoryview_obj *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + struct __pyx_memoryview_obj *__pyx_t_4; + char *__pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + PyObject *(*__pyx_t_8)(PyObject *); + PyObject *__pyx_t_9 = NULL; + Py_ssize_t __pyx_t_10; + int __pyx_t_11; + Py_ssize_t __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memview_slice", 0); + + /* "View.MemoryView":711 + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): + * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< + * cdef bint negative_step + * cdef __Pyx_memviewslice src, dst + */ + __pyx_v_new_ndim = 0; + __pyx_v_suboffset_dim = -1; + + /* "View.MemoryView":718 + * + * + * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< + * + * cdef _memoryviewslice memviewsliceobj + */ + (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst)))); + + /* "View.MemoryView":722 + * cdef _memoryviewslice memviewsliceobj + * + * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(!Py_OptimizeFlag)) { + if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) { + PyErr_SetNone(PyExc_AssertionError); + __PYX_ERR(1, 722, __pyx_L1_error) + } + } + #endif + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":725 + * + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview # <<<<<<<<<<<<<< + * p_src = &memviewsliceobj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 725, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":726 + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, &src) + */ + __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + goto __pyx_L3; + } + + /* "View.MemoryView":728 + * p_src = &memviewsliceobj.from_slice + * else: + * slice_copy(memview, &src) # <<<<<<<<<<<<<< + * p_src = &src + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); + + /* "View.MemoryView":729 + * else: + * slice_copy(memview, &src) + * p_src = &src # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_p_src = (&__pyx_v_src); + } + __pyx_L3:; + + /* "View.MemoryView":735 + * + * + * dst.memview = p_src.memview # <<<<<<<<<<<<<< + * dst.data = p_src.data + * + */ + __pyx_t_4 = __pyx_v_p_src->memview; + __pyx_v_dst.memview = __pyx_t_4; + + /* "View.MemoryView":736 + * + * dst.memview = p_src.memview + * dst.data = p_src.data # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_v_p_src->data; + __pyx_v_dst.data = __pyx_t_5; + + /* "View.MemoryView":741 + * + * + * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< + * cdef int *p_suboffset_dim = &suboffset_dim + * cdef Py_ssize_t start, stop, step + */ + __pyx_v_p_dst = (&__pyx_v_dst); + + /* "View.MemoryView":742 + * + * cdef __Pyx_memviewslice *p_dst = &dst + * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< + * cdef Py_ssize_t start, stop, step + * cdef bint have_start, have_stop, have_step + */ + __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + __pyx_t_6 = 0; + if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { + __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + } else { + __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 746, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_8)) { + if (likely(PyList_CheckExact(__pyx_t_3))) { + if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } else { + if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } + } else { + __pyx_t_9 = __pyx_t_8(__pyx_t_3); + if (unlikely(!__pyx_t_9)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 746, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_9); + } + __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9); + __pyx_t_9 = 0; + __pyx_v_dim = __pyx_t_6; + __pyx_t_6 = (__pyx_t_6 + 1); + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":751 + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + * index, 0, 0, # start, stop, step # <<<<<<<<<<<<<< + * 0, 0, 0, # have_{start,stop,step} + * False) + */ + __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 751, __pyx_L1_error) + + /* "View.MemoryView":748 + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 748, __pyx_L1_error) + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + goto __pyx_L6; + } + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + __pyx_t_2 = (__pyx_v_index == Py_None); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":755 + * False) + * elif index is None: + * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + */ + (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; + + /* "View.MemoryView":756 + * elif index is None: + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 + */ + (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; + + /* "View.MemoryView":757 + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< + * new_ndim += 1 + * else: + */ + (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L; + + /* "View.MemoryView":758 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 # <<<<<<<<<<<<<< + * else: + * start = index.start or 0 + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + goto __pyx_L6; + } + + /* "View.MemoryView":760 + * new_ndim += 1 + * else: + * start = index.start or 0 # <<<<<<<<<<<<<< + * stop = index.stop or 0 + * step = index.step or 0 + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 760, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 760, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L7_bool_binop_done:; + __pyx_v_start = __pyx_t_10; + + /* "View.MemoryView":761 + * else: + * start = index.start or 0 + * stop = index.stop or 0 # <<<<<<<<<<<<<< + * step = index.step or 0 + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 761, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 761, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L9_bool_binop_done:; + __pyx_v_stop = __pyx_t_10; + + /* "View.MemoryView":762 + * start = index.start or 0 + * stop = index.stop or 0 + * step = index.step or 0 # <<<<<<<<<<<<<< + * + * have_start = index.start is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 762, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 762, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L11_bool_binop_done:; + __pyx_v_step = __pyx_t_10; + + /* "View.MemoryView":764 + * step = index.step or 0 + * + * have_start = index.start is not None # <<<<<<<<<<<<<< + * have_stop = index.stop is not None + * have_step = index.step is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_start = __pyx_t_1; + + /* "View.MemoryView":765 + * + * have_start = index.start is not None + * have_stop = index.stop is not None # <<<<<<<<<<<<<< + * have_step = index.step is not None + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_stop = __pyx_t_1; + + /* "View.MemoryView":766 + * have_start = index.start is not None + * have_stop = index.stop is not None + * have_step = index.step is not None # <<<<<<<<<<<<<< + * + * slice_memviewslice( + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_step = __pyx_t_1; + + /* "View.MemoryView":768 + * have_step = index.step is not None + * + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 768, __pyx_L1_error) + + /* "View.MemoryView":774 + * have_start, have_stop, have_step, + * True) + * new_ndim += 1 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + } + __pyx_L6:; + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":778 + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< + * memviewsliceobj.to_dtype_func, + * memview.dtype_is_object) + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 778, __pyx_L1_error) } + + /* "View.MemoryView":779 + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * else: + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 779, __pyx_L1_error) } + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 777, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 777, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + } + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + /*else*/ { + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":783 + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 782, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { + Py_ssize_t __pyx_v_new_shape; + int __pyx_v_negative_step; + int __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + __pyx_t_1 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":830 + * + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + } + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + __pyx_t_1 = (0 <= __pyx_v_start); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); + } + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":832 + * start += shape + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< + * else: + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 832, __pyx_L1_error) + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + } + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":835 + * else: + * + * negative_step = have_step != 0 and step < 0 # <<<<<<<<<<<<<< + * + * if have_step and step == 0: + */ + /*else*/ { + __pyx_t_1 = ((__pyx_v_have_step != 0) != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step < 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L6_bool_binop_done:; + __pyx_v_negative_step = __pyx_t_2; + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + __pyx_t_1 = (__pyx_v_have_step != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step == 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L9_bool_binop_done:; + if (__pyx_t_2) { + + /* "View.MemoryView":838 + * + * if have_step and step == 0: + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 838, __pyx_L1_error) + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + } + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + __pyx_t_2 = (__pyx_v_have_start != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":843 + * if have_start: + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if start < 0: + * start = 0 + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":845 + * start += shape + * if start < 0: + * start = 0 # <<<<<<<<<<<<<< + * elif start >= shape: + * if negative_step: + */ + __pyx_v_start = 0; + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + } + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + goto __pyx_L12; + } + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":848 + * elif start >= shape: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = shape + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L14; + } + + /* "View.MemoryView":850 + * start = shape - 1 + * else: + * start = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + /*else*/ { + __pyx_v_start = __pyx_v_shape; + } + __pyx_L14:; + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + } + __pyx_L12:; + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + goto __pyx_L11; + } + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":853 + * else: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = 0 + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L15; + } + + /* "View.MemoryView":855 + * start = shape - 1 + * else: + * start = 0 # <<<<<<<<<<<<<< + * + * if have_stop: + */ + /*else*/ { + __pyx_v_start = 0; + } + __pyx_L15:; + } + __pyx_L11:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + __pyx_t_2 = (__pyx_v_have_stop != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":859 + * if have_stop: + * if stop < 0: + * stop += shape # <<<<<<<<<<<<<< + * if stop < 0: + * stop = 0 + */ + __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":861 + * stop += shape + * if stop < 0: + * stop = 0 # <<<<<<<<<<<<<< + * elif stop > shape: + * stop = shape + */ + __pyx_v_stop = 0; + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + } + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + goto __pyx_L17; + } + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":863 + * stop = 0 + * elif stop > shape: + * stop = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + __pyx_v_stop = __pyx_v_shape; + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + } + __pyx_L17:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + goto __pyx_L16; + } + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":866 + * else: + * if negative_step: + * stop = -1 # <<<<<<<<<<<<<< + * else: + * stop = shape + */ + __pyx_v_stop = -1L; + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + goto __pyx_L19; + } + + /* "View.MemoryView":868 + * stop = -1 + * else: + * stop = shape # <<<<<<<<<<<<<< + * + * if not have_step: + */ + /*else*/ { + __pyx_v_stop = __pyx_v_shape; + } + __pyx_L19:; + } + __pyx_L16:; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":871 + * + * if not have_step: + * step = 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_step = 1; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + } + + /* "View.MemoryView":875 + * + * with cython.cdivision(True): + * new_shape = (stop - start) // step # <<<<<<<<<<<<<< + * + * if (stop - start) - step * new_shape: + */ + __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":878 + * + * if (stop - start) - step * new_shape: + * new_shape += 1 # <<<<<<<<<<<<<< + * + * if new_shape < 0: + */ + __pyx_v_new_shape = (__pyx_v_new_shape + 1); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + } + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":881 + * + * if new_shape < 0: + * new_shape = 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_new_shape = 0; + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + } + + /* "View.MemoryView":884 + * + * + * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset + */ + (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); + + /* "View.MemoryView":885 + * + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< + * dst.suboffsets[new_ndim] = suboffset + * + */ + (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; + + /* "View.MemoryView":886 + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; + } + __pyx_L3:; + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":890 + * + * if suboffset_dim[0] < 0: + * dst.data += start * stride # <<<<<<<<<<<<<< + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride + */ + __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + goto __pyx_L23; + } + + /* "View.MemoryView":892 + * dst.data += start * stride + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< + * + * if suboffset >= 0: + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_suboffset_dim[0]); + (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); + } + __pyx_L23:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":897 + * if not is_slice: + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + */ + __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + goto __pyx_L26; + } + + /* "View.MemoryView":899 + * dst.data = ( dst.data)[0] + suboffset + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< + * "must be indexed and not sliced", dim) + * else: + */ + /*else*/ { + + /* "View.MemoryView":900 + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<< + * else: + * suboffset_dim[0] = new_ndim + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 899, __pyx_L1_error) + } + __pyx_L26:; + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + goto __pyx_L25; + } + + /* "View.MemoryView":902 + * "must be indexed and not sliced", dim) + * else: + * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< + * + * return 0 + */ + /*else*/ { + (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; + } + __pyx_L25:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + } + + /* "View.MemoryView":904 + * suboffset_dim[0] = new_ndim + * + * return 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + +static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_suboffset; + Py_ssize_t __pyx_v_itemsize; + char *__pyx_v_resultp; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("pybuffer_index", 0); + + /* "View.MemoryView":912 + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< + * cdef Py_ssize_t itemsize = view.itemsize + * cdef char *resultp + */ + __pyx_v_suboffset = -1L; + + /* "View.MemoryView":913 + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< + * cdef char *resultp + * + */ + __pyx_t_1 = __pyx_v_view->itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":917 + * + * if view.ndim == 0: + * shape = view.len / itemsize # <<<<<<<<<<<<<< + * stride = itemsize + * else: + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 917, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 917, __pyx_L1_error) + } + __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize); + + /* "View.MemoryView":918 + * if view.ndim == 0: + * shape = view.len / itemsize + * stride = itemsize # <<<<<<<<<<<<<< + * else: + * shape = view.shape[dim] + */ + __pyx_v_stride = __pyx_v_itemsize; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + goto __pyx_L3; + } + + /* "View.MemoryView":920 + * stride = itemsize + * else: + * shape = view.shape[dim] # <<<<<<<<<<<<<< + * stride = view.strides[dim] + * if view.suboffsets != NULL: + */ + /*else*/ { + __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); + + /* "View.MemoryView":921 + * else: + * shape = view.shape[dim] + * stride = view.strides[dim] # <<<<<<<<<<<<<< + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] + */ + __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":923 + * stride = view.strides[dim] + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< + * + * if index < 0: + */ + __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + } + } + __pyx_L3:; + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":926 + * + * if index < 0: + * index += view.shape[dim] # <<<<<<<<<<<<<< + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + */ + __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":928 + * index += view.shape[dim] + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * if index >= shape: + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 928, __pyx_L1_error) + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + } + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":931 + * + * if index >= shape: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * resultp = bufp + index * stride + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 931, __pyx_L1_error) + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":933 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * resultp = bufp + index * stride # <<<<<<<<<<<<<< + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset + */ + __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":935 + * resultp = bufp + index * stride + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< + * + * return resultp + */ + __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + } + + /* "View.MemoryView":937 + * resultp = ( resultp)[0] + suboffset + * + * return resultp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_resultp; + goto __pyx_L0; + + /* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + +static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { + int __pyx_v_ndim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_r; + int __pyx_t_1; + Py_ssize_t *__pyx_t_2; + long __pyx_t_3; + long __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":944 + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: + * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< + * + * cdef Py_ssize_t *shape = memslice.shape + */ + __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; + __pyx_v_ndim = __pyx_t_1; + + /* "View.MemoryView":946 + * cdef int ndim = memslice.memview.view.ndim + * + * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< + * cdef Py_ssize_t *strides = memslice.strides + * + */ + __pyx_t_2 = __pyx_v_memslice->shape; + __pyx_v_shape = __pyx_t_2; + + /* "View.MemoryView":947 + * + * cdef Py_ssize_t *shape = memslice.shape + * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __pyx_v_memslice->strides; + __pyx_v_strides = __pyx_t_2; + + /* "View.MemoryView":951 + * + * cdef int i, j + * for i in range(ndim / 2): # <<<<<<<<<<<<<< + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + */ + __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2); + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":952 + * cdef int i, j + * for i in range(ndim / 2): + * j = ndim - 1 - i # <<<<<<<<<<<<<< + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] + */ + __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); + + /* "View.MemoryView":953 + * for i in range(ndim / 2): + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< + * shape[i], shape[j] = shape[j], shape[i] + * + */ + __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]); + __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]); + (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5; + (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6; + + /* "View.MemoryView":954 + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + */ + __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]); + __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]); + (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6; + (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5; + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0); + if (!__pyx_t_8) { + } else { + __pyx_t_7 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0); + __pyx_t_7 = __pyx_t_8; + __pyx_L6_bool_binop_done:; + if (__pyx_t_7) { + + /* "View.MemoryView":957 + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< + * + * return 1 + */ + __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 957, __pyx_L1_error) + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + } + } + + /* "View.MemoryView":959 + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + * return 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 1; + goto __pyx_L0; + + /* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = 0; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + +/* Python wrapper */ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":977 + * + * def __dealloc__(self): + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1); + + /* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":981 + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) # <<<<<<<<<<<<<< + * else: + * return memoryview.convert_item_to_object(self, itemp) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 981, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + } + + /* "View.MemoryView":983 + * return self.to_object_func(itemp) + * else: + * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 983, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":987 + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< + * else: + * memoryview.assign_item_from_object(self, itemp, value) + */ + __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 987, __pyx_L1_error) + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":989 + * self.to_dtype_func(itemp, value) + * else: + * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< + * + * @property + */ + /*else*/ { + __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 989, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":993 + * @property + * def base(self): + * return self.from_object # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->from_object); + __pyx_r = __pyx_v_self->from_object; + goto __pyx_L0; + + /* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_TypeInfo *__pyx_t_4; + Py_buffer __pyx_t_5; + Py_ssize_t *__pyx_t_6; + Py_ssize_t *__pyx_t_7; + Py_ssize_t *__pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_fromslice", 0); + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1008 + * + * if memviewslice.memview == Py_None: + * return None # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "View.MemoryView":1013 + * + * + * result = _memoryviewslice(None, 0, dtype_is_object) # <<<<<<<<<<<<<< + * + * result.from_slice = memviewslice + */ + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1015 + * result = _memoryviewslice(None, 0, dtype_is_object) + * + * result.from_slice = memviewslice # <<<<<<<<<<<<<< + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + */ + __pyx_v_result->from_slice = __pyx_v_memviewslice; + + /* "View.MemoryView":1016 + * + * result.from_slice = memviewslice + * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< + * + * result.from_object = ( memviewslice.memview).base + */ + __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); + + /* "View.MemoryView":1018 + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + * result.from_object = ( memviewslice.memview).base # <<<<<<<<<<<<<< + * result.typeinfo = memviewslice.memview.typeinfo + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1018, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_result->from_object); + __Pyx_DECREF(__pyx_v_result->from_object); + __pyx_v_result->from_object = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":1019 + * + * result.from_object = ( memviewslice.memview).base + * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< + * + * result.view = memviewslice.memview.view + */ + __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; + __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; + + /* "View.MemoryView":1021 + * result.typeinfo = memviewslice.memview.typeinfo + * + * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + */ + __pyx_t_5 = __pyx_v_memviewslice.memview->view; + __pyx_v_result->__pyx_base.view = __pyx_t_5; + + /* "View.MemoryView":1022 + * + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + */ + __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); + + /* "View.MemoryView":1023 + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data + * result.view.ndim = ndim # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; + + /* "View.MemoryView":1024 + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; + + /* "View.MemoryView":1025 + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1028 + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< + * else: + * result.flags = PyBUF_RECORDS_RO + */ + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1030 + * result.flags = PyBUF_RECORDS + * else: + * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<< + * + * result.view.shape = result.from_slice.shape + */ + /*else*/ { + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO; + } + __pyx_L4:; + + /* "View.MemoryView":1032 + * result.flags = PyBUF_RECORDS_RO + * + * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< + * result.view.strides = result.from_slice.strides + * + */ + __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); + + /* "View.MemoryView":1033 + * + * result.view.shape = result.from_slice.shape + * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); + + /* "View.MemoryView":1036 + * + * + * result.view.suboffsets = NULL # <<<<<<<<<<<<<< + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + */ + __pyx_v_result->__pyx_base.view.suboffsets = NULL; + + /* "View.MemoryView":1037 + * + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + */ + __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_v_suboffset = (__pyx_t_6[0]); + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1039 + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); + + /* "View.MemoryView":1040 + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + * break # <<<<<<<<<<<<<< + * + * result.view.len = result.view.itemsize + */ + goto __pyx_L6_break; + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + } + } + __pyx_L6_break:; + + /* "View.MemoryView":1042 + * break + * + * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< + * for length in result.view.shape[:ndim]: + * result.view.len *= length + */ + __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + + /* "View.MemoryView":1043 + * + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<< + * result.view.len *= length + * + */ + __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1044 + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: + * result.view.len *= length # <<<<<<<<<<<<<< + * + * result.to_object_func = to_object_func + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + } + + /* "View.MemoryView":1046 + * result.view.len *= length + * + * result.to_object_func = to_object_func # <<<<<<<<<<<<<< + * result.to_dtype_func = to_dtype_func + * + */ + __pyx_v_result->to_object_func = __pyx_v_to_object_func; + + /* "View.MemoryView":1047 + * + * result.to_object_func = to_object_func + * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; + + /* "View.MemoryView":1049 + * result.to_dtype_func = to_dtype_func + * + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { + struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; + __Pyx_memviewslice *__pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_slice_from_memview", 0); + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1056 + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): + * obj = memview # <<<<<<<<<<<<<< + * return &obj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 1056, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":1057 + * if isinstance(memview, _memoryviewslice): + * obj = memview + * return &obj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, mslice) + */ + __pyx_r = (&__pyx_v_obj->from_slice); + goto __pyx_L0; + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + } + + /* "View.MemoryView":1059 + * return &obj.from_slice + * else: + * slice_copy(memview, mslice) # <<<<<<<<<<<<<< + * return mslice + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); + + /* "View.MemoryView":1060 + * else: + * slice_copy(memview, mslice) + * return mslice # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_slice_copy') + */ + __pyx_r = __pyx_v_mslice; + goto __pyx_L0; + } + + /* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_obj); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { + int __pyx_v_dim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + Py_ssize_t *__pyx_v_suboffsets; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + __Pyx_RefNannySetupContext("slice_copy", 0); + + /* "View.MemoryView":1067 + * cdef (Py_ssize_t*) shape, strides, suboffsets + * + * shape = memview.view.shape # <<<<<<<<<<<<<< + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets + */ + __pyx_t_1 = __pyx_v_memview->view.shape; + __pyx_v_shape = __pyx_t_1; + + /* "View.MemoryView":1068 + * + * shape = memview.view.shape + * strides = memview.view.strides # <<<<<<<<<<<<<< + * suboffsets = memview.view.suboffsets + * + */ + __pyx_t_1 = __pyx_v_memview->view.strides; + __pyx_v_strides = __pyx_t_1; + + /* "View.MemoryView":1069 + * shape = memview.view.shape + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< + * + * dst.memview = <__pyx_memoryview *> memview + */ + __pyx_t_1 = __pyx_v_memview->view.suboffsets; + __pyx_v_suboffsets = __pyx_t_1; + + /* "View.MemoryView":1071 + * suboffsets = memview.view.suboffsets + * + * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< + * dst.data = memview.view.buf + * + */ + __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); + + /* "View.MemoryView":1072 + * + * dst.memview = <__pyx_memoryview *> memview + * dst.data = memview.view.buf # <<<<<<<<<<<<<< + * + * for dim in range(memview.view.ndim): + */ + __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); + + /* "View.MemoryView":1074 + * dst.data = memview.view.buf + * + * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + */ + __pyx_t_2 = __pyx_v_memview->view.ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_dim = __pyx_t_4; + + /* "View.MemoryView":1075 + * + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + */ + (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); + + /* "View.MemoryView":1076 + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + * + */ + (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); + + /* "View.MemoryView":1077 + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object') + */ + if ((__pyx_v_suboffsets != 0)) { + __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]); + } else { + __pyx_t_5 = -1L; + } + (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5; + } + + /* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { + __Pyx_memviewslice __pyx_v_memviewslice; + 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("memoryview_copy", 0); + + /* "View.MemoryView":1083 + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< + * return memoryview_copy_from_slice(memview, &memviewslice) + * + */ + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); + + /* "View.MemoryView":1084 + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) + * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object_from_slice') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { + PyObject *(*__pyx_v_to_object_func)(char *); + int (*__pyx_v_to_dtype_func)(char *, PyObject *); + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *(*__pyx_t_3)(char *); + int (*__pyx_t_4)(char *, PyObject *); + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1095 + * + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + */ + __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; + __pyx_v_to_object_func = __pyx_t_3; + + /* "View.MemoryView":1096 + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< + * else: + * to_object_func = NULL + */ + __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; + __pyx_v_to_dtype_func = __pyx_t_4; + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1098 + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + * to_object_func = NULL # <<<<<<<<<<<<<< + * to_dtype_func = NULL + * + */ + /*else*/ { + __pyx_v_to_object_func = NULL; + + /* "View.MemoryView":1099 + * else: + * to_object_func = NULL + * to_dtype_func = NULL # <<<<<<<<<<<<<< + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + */ + __pyx_v_to_dtype_func = NULL; + } + __pyx_L3:; + + /* "View.MemoryView":1101 + * to_dtype_func = NULL + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< + * to_object_func, to_dtype_func, + * memview.dtype_is_object) + */ + __Pyx_XDECREF(__pyx_r); + + /* "View.MemoryView":1103 + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + * to_object_func, to_dtype_func, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + +static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { + Py_ssize_t __pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + __pyx_t_1 = ((__pyx_v_arg < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1111 + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: + * return -arg # <<<<<<<<<<<<<< + * else: + * return arg + */ + __pyx_r = (-__pyx_v_arg); + goto __pyx_L0; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + } + + /* "View.MemoryView":1113 + * return -arg + * else: + * return arg # <<<<<<<<<<<<<< + * + * @cname('__pyx_get_best_slice_order') + */ + /*else*/ { + __pyx_r = __pyx_v_arg; + goto __pyx_L0; + } + + /* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + +static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { + int __pyx_v_i; + Py_ssize_t __pyx_v_c_stride; + Py_ssize_t __pyx_v_f_stride; + char __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1121 + * """ + * cdef int i + * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< + * cdef Py_ssize_t f_stride = 0 + * + */ + __pyx_v_c_stride = 0; + + /* "View.MemoryView":1122 + * cdef int i + * cdef Py_ssize_t c_stride = 0 + * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_f_stride = 0; + + /* "View.MemoryView":1124 + * cdef Py_ssize_t f_stride = 0 + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1126 + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1127 + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + goto __pyx_L4_break; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L4_break:; + + /* "View.MemoryView":1129 + * break + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + */ + __pyx_t_1 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_1; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1131 + * for i in range(ndim): + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1132 + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + */ + goto __pyx_L7_break; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L7_break:; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1135 + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + * return 'C' # <<<<<<<<<<<<<< + * else: + * return 'F' + */ + __pyx_r = 'C'; + goto __pyx_L0; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + } + + /* "View.MemoryView":1137 + * return 'C' + * else: + * return 'F' # <<<<<<<<<<<<<< + * + * @cython.cdivision(True) + */ + /*else*/ { + __pyx_r = 'F'; + goto __pyx_L0; + } + + /* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + +static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; + Py_ssize_t __pyx_v_dst_extent; + Py_ssize_t __pyx_v_src_stride; + Py_ssize_t __pyx_v_dst_stride; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + + /* "View.MemoryView":1147 + * + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + */ + __pyx_v_src_extent = (__pyx_v_src_shape[0]); + + /* "View.MemoryView":1148 + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] + */ + __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); + + /* "View.MemoryView":1149 + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + */ + __pyx_v_src_stride = (__pyx_v_src_strides[0]); + + /* "View.MemoryView":1150 + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + + /* "View.MemoryView":1154 + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + */ + __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); + if (__pyx_t_2) { + __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); + } + __pyx_t_3 = (__pyx_t_2 != 0); + __pyx_t_1 = __pyx_t_3; + __pyx_L5_bool_binop_done:; + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + if (__pyx_t_1) { + + /* "View.MemoryView":1155 + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent))); + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1157 + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __pyx_t_5 = __pyx_t_4; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1158 + * else: + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< + * src_data += src_stride + * dst_data += dst_stride + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize)); + + /* "View.MemoryView":1159 + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * else: + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1160 + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L4:; + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1162 + * dst_data += dst_stride + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * _copy_strided_to_strided(src_data, src_strides + 1, + * dst_data, dst_strides + 1, + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __pyx_t_5 = __pyx_t_4; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1163 + * else: + * for i in range(dst_extent): + * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< + * dst_data, dst_strides + 1, + * src_shape + 1, dst_shape + 1, + */ + _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); + + /* "View.MemoryView":1167 + * src_shape + 1, dst_shape + 1, + * ndim - 1, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1168 + * ndim - 1, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + + /* function exit code */ +} + +/* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + +static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + + /* "View.MemoryView":1173 + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< + * src.shape, dst.shape, ndim, itemsize) + * + */ + _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_size; + Py_ssize_t __pyx_r; + Py_ssize_t __pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + + /* "View.MemoryView":1179 + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<< + * + * for shape in src.shape[:ndim]: + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_size = __pyx_t_1; + + /* "View.MemoryView":1181 + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + * + * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<< + * size *= shape + * + */ + __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim); + for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_shape = (__pyx_t_2[0]); + + /* "View.MemoryView":1182 + * + * for shape in src.shape[:ndim]: + * size *= shape # <<<<<<<<<<<<<< + * + * return size + */ + __pyx_v_size = (__pyx_v_size * __pyx_v_shape); + } + + /* "View.MemoryView":1184 + * size *= shape + * + * return size # <<<<<<<<<<<<<< + * + * @cname('__pyx_fill_contig_strides_array') + */ + __pyx_r = __pyx_v_size; + goto __pyx_L0; + + /* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { + int __pyx_v_idx; + Py_ssize_t __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + __pyx_t_1 = ((__pyx_v_order == 'F') != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1197 + * + * if order == 'F': + * for idx in range(ndim): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + __pyx_t_2 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_idx = __pyx_t_4; + + /* "View.MemoryView":1198 + * if order == 'F': + * for idx in range(ndim): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * else: + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1199 + * for idx in range(ndim): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * else: + * for idx in range(ndim - 1, -1, -1): + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1201 + * stride *= shape[idx] + * else: + * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + /*else*/ { + for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { + __pyx_v_idx = __pyx_t_2; + + /* "View.MemoryView":1202 + * else: + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1203 + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * + * return stride + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + } + __pyx_L3:; + + /* "View.MemoryView":1205 + * stride *= shape[idx] + * + * return stride # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_data_to_temp') + */ + __pyx_r = __pyx_v_stride; + goto __pyx_L0; + + /* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { + int __pyx_v_i; + void *__pyx_v_result; + size_t __pyx_v_itemsize; + size_t __pyx_v_size; + void *__pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + struct __pyx_memoryview_obj *__pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1219 + * cdef void *result + * + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef size_t size = slice_get_size(src, ndim) + * + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1220 + * + * cdef size_t itemsize = src.memview.view.itemsize + * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< + * + * result = malloc(size) + */ + __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); + + /* "View.MemoryView":1222 + * cdef size_t size = slice_get_size(src, ndim) + * + * result = malloc(size) # <<<<<<<<<<<<<< + * if not result: + * _err(MemoryError, NULL) + */ + __pyx_v_result = malloc(__pyx_v_size); + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1224 + * result = malloc(size) + * if not result: + * _err(MemoryError, NULL) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1224, __pyx_L1_error) + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + } + + /* "View.MemoryView":1227 + * + * + * tmpslice.data = result # <<<<<<<<<<<<<< + * tmpslice.memview = src.memview + * for i in range(ndim): + */ + __pyx_v_tmpslice->data = ((char *)__pyx_v_result); + + /* "View.MemoryView":1228 + * + * tmpslice.data = result + * tmpslice.memview = src.memview # <<<<<<<<<<<<<< + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + */ + __pyx_t_4 = __pyx_v_src->memview; + __pyx_v_tmpslice->memview = __pyx_t_4; + + /* "View.MemoryView":1229 + * tmpslice.data = result + * tmpslice.memview = src.memview + * for i in range(ndim): # <<<<<<<<<<<<<< + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1230 + * tmpslice.memview = src.memview + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< + * tmpslice.suboffsets[i] = -1 + * + */ + (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); + + /* "View.MemoryView":1231 + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, + */ + (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1233 + * tmpslice.suboffsets[i] = -1 + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, # <<<<<<<<<<<<<< + * ndim, order) + * + */ + (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order)); + + /* "View.MemoryView":1237 + * + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1239 + * for i in range(ndim): + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< + * + * if slice_is_contig(src[0], order, ndim): + */ + (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + } + } + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1242 + * + * if slice_is_contig(src[0], order, ndim): + * memcpy(result, src.data, size) # <<<<<<<<<<<<<< + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + */ + (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size)); + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":1244 + * memcpy(result, src.data, size) + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< + * + * return result + */ + /*else*/ { + copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); + } + __pyx_L9:; + + /* "View.MemoryView":1246 + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = NULL; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + +static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_extents", 0); + + /* "View.MemoryView":1254 + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + * (i, extent1, extent2)) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err_dim') + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":1253 + * cdef int _err_extents(int i, Py_ssize_t extent1, + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % # <<<<<<<<<<<<<< + * (i, extent1, extent2)) + * + */ + __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(1, 1253, __pyx_L1_error) + + /* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + + /* 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("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + +static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_dim", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1258 + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: + * raise error(msg.decode('ascii') % dim) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err') + */ + __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1258, __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_INCREF(__pyx_v_error); + __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && 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_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 1258, __pyx_L1_error) + + /* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + + /* 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("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + +static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) { + 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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + __pyx_t_1 = ((__pyx_v_msg != NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":1263 + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: + * raise error(msg.decode('ascii')) # <<<<<<<<<<<<<< + * else: + * raise error + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_error); + __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 1263, __pyx_L1_error) + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + } + + /* "View.MemoryView":1265 + * raise error(msg.decode('ascii')) + * else: + * raise error # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_contents') + */ + /*else*/ { + __Pyx_Raise(__pyx_v_error, 0, 0, 0); + __PYX_ERR(1, 1265, __pyx_L1_error) + } + + /* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + + /* 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("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { + void *__pyx_v_tmpdata; + size_t __pyx_v_itemsize; + int __pyx_v_i; + char __pyx_v_order; + int __pyx_v_broadcasting; + int __pyx_v_direct_copy; + __Pyx_memviewslice __pyx_v_tmp; + int __pyx_v_ndim; + int __pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + void *__pyx_t_7; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1276 + * Check for overlapping memory and verify the shapes. + * """ + * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + */ + __pyx_v_tmpdata = NULL; + + /* "View.MemoryView":1277 + * """ + * cdef void *tmpdata = NULL + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + */ + __pyx_t_1 = __pyx_v_src.memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1279 + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< + * cdef bint broadcasting = False + * cdef bint direct_copy = False + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); + + /* "View.MemoryView":1280 + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False # <<<<<<<<<<<<<< + * cdef bint direct_copy = False + * cdef __Pyx_memviewslice tmp + */ + __pyx_v_broadcasting = 0; + + /* "View.MemoryView":1281 + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False + * cdef bint direct_copy = False # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice tmp + * + */ + __pyx_v_direct_copy = 0; + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1285 + * + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1287 + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< + * + * cdef int ndim = max(src_ndim, dst_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + } + __pyx_L3:; + + /* "View.MemoryView":1289 + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + __pyx_t_3 = __pyx_v_dst_ndim; + __pyx_t_4 = __pyx_v_src_ndim; + if (((__pyx_t_3 > __pyx_t_4) != 0)) { + __pyx_t_5 = __pyx_t_3; + } else { + __pyx_t_5 = __pyx_t_4; + } + __pyx_v_ndim = __pyx_t_5; + + /* "View.MemoryView":1291 + * cdef int ndim = max(src_ndim, dst_ndim) + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + */ + __pyx_t_5 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_5; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1294 + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + * broadcasting = True # <<<<<<<<<<<<<< + * src.strides[i] = 0 + * else: + */ + __pyx_v_broadcasting = 1; + + /* "View.MemoryView":1295 + * if src.shape[i] == 1: + * broadcasting = True + * src.strides[i] = 0 # <<<<<<<<<<<<<< + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) + */ + (__pyx_v_src.strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + goto __pyx_L7; + } + + /* "View.MemoryView":1297 + * src.strides[i] = 0 + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< + * + * if src.suboffsets[i] >= 0: + */ + /*else*/ { + __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + } + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1300 + * + * if src.suboffsets[i] >= 0: + * _err_dim(ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< + * + * if slices_overlap(&src, &dst, ndim, itemsize): + */ + __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1300, __pyx_L1_error) + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + } + } + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1305 + * + * if not slice_is_contig(src, order, ndim): + * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + } + + /* "View.MemoryView":1307 + * order = get_best_order(&dst, ndim) + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< + * src = tmp + * + */ + __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1307, __pyx_L1_error) + __pyx_v_tmpdata = __pyx_t_7; + + /* "View.MemoryView":1308 + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + * src = tmp # <<<<<<<<<<<<<< + * + * if not broadcasting: + */ + __pyx_v_src = __pyx_v_tmp; + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1314 + * + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<< + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim); + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + goto __pyx_L12; + } + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1316 + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<< + * + * if direct_copy: + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim); + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + } + __pyx_L12:; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_2 = (__pyx_v_direct_copy != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1320 + * if direct_copy: + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1321 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + */ + (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim))); + + /* "View.MemoryView":1322 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * free(tmpdata) + * return 0 + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1323 + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1324 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * if order == 'F' == get_best_order(&dst, ndim): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = (__pyx_v_order == 'F'); + if (__pyx_t_2) { + __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); + } + __pyx_t_8 = (__pyx_t_2 != 0); + if (__pyx_t_8) { + + /* "View.MemoryView":1329 + * + * + * transpose_memslice(&src) # <<<<<<<<<<<<<< + * transpose_memslice(&dst) + * + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1329, __pyx_L1_error) + + /* "View.MemoryView":1330 + * + * transpose_memslice(&src) + * transpose_memslice(&dst) # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1330, __pyx_L1_error) + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1332 + * transpose_memslice(&dst) + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1333 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + */ + copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1334 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * free(tmpdata) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1336 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1337 + * + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_broadcast_leading') + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) { + int __pyx_v_i; + int __pyx_v_offset; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + + /* "View.MemoryView":1344 + * int ndim_other) nogil: + * cdef int i + * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); + + /* "View.MemoryView":1346 + * cdef int offset = ndim_other - ndim + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1347 + * + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<< + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + */ + (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]); + + /* "View.MemoryView":1348 + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<< + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + */ + (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1349 + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<< + * + * for i in range(offset): + */ + (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]); + } + + /* "View.MemoryView":1351 + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + * for i in range(offset): # <<<<<<<<<<<<<< + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + */ + __pyx_t_1 = __pyx_v_offset; + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1352 + * + * for i in range(offset): + * mslice.shape[i] = 1 # <<<<<<<<<<<<<< + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 + */ + (__pyx_v_mslice->shape[__pyx_v_i]) = 1; + + /* "View.MemoryView":1353 + * for i in range(offset): + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<< + * mslice.suboffsets[i] = -1 + * + */ + (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]); + + /* "View.MemoryView":1354 + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { + int __pyx_t_1; + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + __pyx_t_1 = (__pyx_v_dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1367 + * + * if dtype_is_object: + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, # <<<<<<<<<<<<<< + * dst.strides, ndim, inc) + * + */ + __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + } + + /* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + + /* function exit code */ +} + +/* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + __Pyx_RefNannyDeclarations + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); + + /* "View.MemoryView":1374 + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif +} + +/* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + +static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); + + /* "View.MemoryView":1381 + * cdef Py_ssize_t i + * + * for i in range(shape[0]): # <<<<<<<<<<<<<< + * if ndim == 1: + * if inc: + */ + __pyx_t_1 = (__pyx_v_shape[0]); + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + __pyx_t_4 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + __pyx_t_4 = (__pyx_v_inc != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1384 + * if ndim == 1: + * if inc: + * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * Py_DECREF(( data)[0]) + */ + Py_INCREF((((PyObject **)__pyx_v_data)[0])); + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":1386 + * Py_INCREF(( data)[0]) + * else: + * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + */ + /*else*/ { + Py_DECREF((((PyObject **)__pyx_v_data)[0])); + } + __pyx_L6:; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + goto __pyx_L5; + } + + /* "View.MemoryView":1388 + * Py_DECREF(( data)[0]) + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, inc) + * + */ + /*else*/ { + + /* "View.MemoryView":1389 + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + * ndim - 1, inc) # <<<<<<<<<<<<<< + * + * data += strides[0] + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); + } + __pyx_L5:; + + /* "View.MemoryView":1391 + * ndim - 1, inc) + * + * data += strides[0] # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0])); + } + + /* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { + + /* "View.MemoryView":1400 + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1401 + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, # <<<<<<<<<<<<<< + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1403 + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + +static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_extent; + int __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + + /* "View.MemoryView":1411 + * size_t itemsize, void *item) nogil: + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t extent = shape[0] + * + */ + __pyx_v_stride = (__pyx_v_strides[0]); + + /* "View.MemoryView":1412 + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] + * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_extent = (__pyx_v_shape[0]); + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1415 + * + * if ndim == 1: + * for i in range(extent): # <<<<<<<<<<<<<< + * memcpy(data, item, itemsize) + * data += stride + */ + __pyx_t_2 = __pyx_v_extent; + __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; + + /* "View.MemoryView":1416 + * if ndim == 1: + * for i in range(extent): + * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< + * data += stride + * else: + */ + (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize)); + + /* "View.MemoryView":1417 + * for i in range(extent): + * memcpy(data, item, itemsize) + * data += stride # <<<<<<<<<<<<<< + * else: + * for i in range(extent): + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1419 + * data += stride + * else: + * for i in range(extent): # <<<<<<<<<<<<<< + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + */ + /*else*/ { + __pyx_t_2 = __pyx_v_extent; + __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; + + /* "View.MemoryView":1420 + * else: + * for i in range(extent): + * _slice_assign_scalar(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, itemsize, item) + * data += stride + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1422 + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + * data += stride # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + + /* function exit code */ +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__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_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_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; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb068931) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + */ + __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_Enum(__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_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __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_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[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) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->name); + __Pyx_DECREF(__pyx_v___pyx_result->name); + __pyx_v___pyx_result->name = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[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_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = ((__pyx_t_3 > 1) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< + */ + __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 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 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_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__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_array __pyx_vtable_array; + +static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_array_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_array_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_array; + p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_format = ((PyObject*)Py_None); Py_INCREF(Py_None); + if (unlikely(__pyx_array___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_array(PyObject *o) { + struct __pyx_array_obj *p = (struct __pyx_array_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_array___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->mode); + Py_CLEAR(p->_format); + (*Py_TYPE(o)->tp_free)(o); +} +static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_array___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) { + PyObject *v = __Pyx_PyObject_GenericGetAttr(o, n); + if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + v = __pyx_array___getattr__(o, n); + } + return v; +} + +static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(o); +} + +static PyMethodDef __pyx_methods_array[] = { + {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_array[] = { + {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_array = { + __pyx_array___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_array, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_array = { + __pyx_array___len__, /*mp_length*/ + __pyx_array___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_array, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_array = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_array_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_array = { + PyVarObject_HEAD_INIT(0, 0) + "shape_profs.shape_profs_algos.array", /*tp_name*/ + sizeof(struct __pyx_array_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_array, /*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*/ + &__pyx_tp_as_sequence_array, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_array, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + __pyx_tp_getattro_array, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_array, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_array, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_array, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_array, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_MemviewEnum_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_MemviewEnum_obj *)o); + p->name = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_Enum(PyObject *o) { + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->name); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + if (p->name) { + e = (*v)(p->name, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_Enum(PyObject *o) { + PyObject* tmp; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + tmp = ((PyObject*)p->name); + p->name = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_Enum[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_MemviewEnum = { + PyVarObject_HEAD_INIT(0, 0) + "shape_profs.shape_profs_algos.Enum", /*tp_name*/ + sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_Enum, /*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 + __pyx_MemviewEnum___repr__, /*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*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_Enum, /*tp_traverse*/ + __pyx_tp_clear_Enum, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_Enum, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_MemviewEnum___init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_Enum, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview; + +static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryview_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryview_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_memoryview; + p->obj = Py_None; Py_INCREF(Py_None); + p->_size = Py_None; Py_INCREF(Py_None); + p->_array_interface = Py_None; Py_INCREF(Py_None); + p->view.obj = NULL; + if (unlikely(__pyx_memoryview___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_memoryview(PyObject *o) { + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryview___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->obj); + Py_CLEAR(p->_size); + Py_CLEAR(p->_array_interface); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + if (p->obj) { + e = (*v)(p->obj, a); if (e) return e; + } + if (p->_size) { + e = (*v)(p->_size, a); if (e) return e; + } + if (p->_array_interface) { + e = (*v)(p->_array_interface, a); if (e) return e; + } + if (p->view.obj) { + e = (*v)(p->view.obj, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_memoryview(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + tmp = ((PyObject*)p->obj); + p->obj = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_size); + p->_size = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_array_interface); + p->_array_interface = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + Py_CLEAR(p->view.obj); + return 0; +} +static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_memoryview___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o); +} + +static PyMethodDef __pyx_methods_memoryview[] = { + {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0}, + {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0}, + {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0}, + {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_memoryview[] = { + {(char *)"T", __pyx_getprop___pyx_memoryview_T, 0, (char *)0, 0}, + {(char *)"base", __pyx_getprop___pyx_memoryview_base, 0, (char *)0, 0}, + {(char *)"shape", __pyx_getprop___pyx_memoryview_shape, 0, (char *)0, 0}, + {(char *)"strides", __pyx_getprop___pyx_memoryview_strides, 0, (char *)0, 0}, + {(char *)"suboffsets", __pyx_getprop___pyx_memoryview_suboffsets, 0, (char *)0, 0}, + {(char *)"ndim", __pyx_getprop___pyx_memoryview_ndim, 0, (char *)0, 0}, + {(char *)"itemsize", __pyx_getprop___pyx_memoryview_itemsize, 0, (char *)0, 0}, + {(char *)"nbytes", __pyx_getprop___pyx_memoryview_nbytes, 0, (char *)0, 0}, + {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_memoryview = { + __pyx_memoryview___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_memoryview, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_memoryview = { + __pyx_memoryview___len__, /*mp_length*/ + __pyx_memoryview___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_memoryview, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_memoryview = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_memoryview_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_memoryview = { + PyVarObject_HEAD_INIT(0, 0) + "shape_profs.shape_profs_algos.memoryview", /*tp_name*/ + sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_memoryview, /*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 + __pyx_memoryview___repr__, /*tp_repr*/ + 0, /*tp_as_number*/ + &__pyx_tp_as_sequence_memoryview, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_memoryview, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + __pyx_memoryview___str__, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_memoryview, /*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*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_memoryview, /*tp_traverse*/ + __pyx_tp_clear_memoryview, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_memoryview, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_memoryview, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_memoryview, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice; + +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryviewslice_obj *p; + PyObject *o = __pyx_tp_new_memoryview(t, a, k); + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryviewslice_obj *)o); + p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice; + p->from_object = Py_None; Py_INCREF(Py_None); + p->from_slice.memview = NULL; + return o; +} + +static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryviewslice___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->from_object); + PyObject_GC_Track(o); + __pyx_tp_dealloc_memoryview(o); +} + +static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + e = __pyx_tp_traverse_memoryview(o, v, a); if (e) return e; + if (p->from_object) { + e = (*v)(p->from_object, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear__memoryviewslice(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + __pyx_tp_clear_memoryview(o); + tmp = ((PyObject*)p->from_object); + p->from_object = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + __PYX_XDEC_MEMVIEW(&p->from_slice, 1); + return 0; +} + +static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o); +} + +static PyMethodDef __pyx_methods__memoryviewslice[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = { + {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_memoryviewslice = { + PyVarObject_HEAD_INIT(0, 0) + "shape_profs.shape_profs_algos._memoryviewslice", /*tp_name*/ + sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc__memoryviewslice, /*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 + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___repr__, /*tp_repr*/ + #else + 0, /*tp_repr*/ + #endif + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___str__, /*tp_str*/ + #else + 0, /*tp_str*/ + #endif + 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*/ + "Internal class for passing memoryview slices to Python", /*tp_doc*/ + __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/ + __pyx_tp_clear__memoryviewslice, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods__memoryviewslice, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets__memoryviewslice, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new__memoryviewslice, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_shape_profs_algos(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_shape_profs_algos}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "shape_profs_algos", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 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_s_CENTER, __pyx_k_CENTER, sizeof(__pyx_k_CENTER), 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_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0}, + {&__pyx_n_s_D_BINS, __pyx_k_D_BINS, sizeof(__pyx_k_D_BINS), 0, 0, 1, 1}, + {&__pyx_n_s_D_LOGEND, __pyx_k_D_LOGEND, sizeof(__pyx_k_D_LOGEND), 0, 0, 1, 1}, + {&__pyx_n_s_D_LOGSTART, __pyx_k_D_LOGSTART, sizeof(__pyx_k_D_LOGSTART), 0, 0, 1, 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_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_k_Incompatible_checksums_s_vs_0xb0, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb0), 0, 0, 1, 0}, + {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, + {&__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_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0}, + {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0}, + {&__pyx_n_s_L_BOX, __pyx_k_L_BOX, sizeof(__pyx_k_L_BOX), 0, 0, 1, 1}, + {&__pyx_n_s_MIN_NUMBER_PTCS, __pyx_k_MIN_NUMBER_PTCS, sizeof(__pyx_k_MIN_NUMBER_PTCS), 0, 0, 1, 1}, + {&__pyx_n_s_M_TOL, __pyx_k_M_TOL, sizeof(__pyx_k_M_TOL), 0, 0, 1, 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_s_N_MIN, __pyx_k_N_MIN, sizeof(__pyx_k_N_MIN), 0, 0, 1, 1}, + {&__pyx_n_s_N_WALL, __pyx_k_N_WALL, sizeof(__pyx_k_N_WALL), 0, 0, 1, 1}, + {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, + {&__pyx_kp_s_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, 0, 1, 0}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_SAFE, __pyx_k_SAFE, sizeof(__pyx_k_SAFE), 0, 0, 1, 1}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 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_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_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, + {&__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_calcMorphGlobal, __pyx_k_calcMorphGlobal, sizeof(__pyx_k_calcMorphGlobal), 0, 0, 1, 1}, + {&__pyx_n_s_calcMorphGlobalVelDisp, __pyx_k_calcMorphGlobalVelDisp, sizeof(__pyx_k_calcMorphGlobalVelDisp), 0, 0, 1, 1}, + {&__pyx_n_s_calcMorphLocal, __pyx_k_calcMorphLocal, sizeof(__pyx_k_calcMorphLocal), 0, 0, 1, 1}, + {&__pyx_n_s_calcMorphLocalVelDisp, __pyx_k_calcMorphLocalVelDisp, sizeof(__pyx_k_calcMorphLocalVelDisp), 0, 0, 1, 1}, + {&__pyx_n_s_cat, __pyx_k_cat, sizeof(__pyx_k_cat), 0, 0, 1, 1}, + {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 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_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_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 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_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 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_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 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_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0}, + {&__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_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_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_masses, __pyx_k_masses, sizeof(__pyx_k_masses), 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_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 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_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_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 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_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__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_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_r200, __pyx_k_r200, sizeof(__pyx_k_r200), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__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_reduced, __pyx_k_reduced, sizeof(__pyx_k_reduced), 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_shape_profs_shape_profs_algos, __pyx_k_shape_profs_shape_profs_algos, sizeof(__pyx_k_shape_profs_shape_profs_algos), 0, 0, 1, 1}, + {&__pyx_kp_s_shape_profs_shape_profs_algos_py, __pyx_k_shape_profs_shape_profs_algos_py, sizeof(__pyx_k_shape_profs_shape_profs_algos_py), 0, 0, 1, 0}, + {&__pyx_n_s_shell_based, __pyx_k_shell_based, sizeof(__pyx_k_shell_based), 0, 0, 1, 1}, + {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, + {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 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}, + {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 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_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_vxyz, __pyx_k_vxyz, sizeof(__pyx_k_vxyz), 0, 0, 1, 1}, + {&__pyx_n_s_xyz, __pyx_k_xyz, sizeof(__pyx_k_xyz), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 133, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 148, __pyx_L1_error) + __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 151, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(1, 180, __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_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(1, 404, __pyx_L1_error) + __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(1, 613, __pyx_L1_error) + __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(1, 832, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(1, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __pyx_tuple__12 = PyTuple_New(1); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_INCREF(__pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_int_neg_1); + PyTuple_SET_ITEM(__pyx_tuple__12, 0, __pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_tuple__12); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_GIVEREF(__pyx_tuple__13); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_slice__15 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__15)) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__15); + __Pyx_GIVEREF(__pyx_slice__15); + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(1, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__16); + __Pyx_GIVEREF(__pyx_tuple__16); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__18); + __Pyx_GIVEREF(__pyx_tuple__18); + + /* "shape_profs/shape_profs_algos.pyx":216 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphLocal(float[:,:] xyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, int M_TOL, int N_WALL, int N_MIN, str CENTER, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Calculates the local shape catalogue + * + */ + __pyx_tuple__19 = PyTuple_Pack(15, __pyx_n_s_xyz, __pyx_n_s_masses, __pyx_n_s_r200, __pyx_n_s_cat, __pyx_n_s_L_BOX, __pyx_n_s_MIN_NUMBER_PTCS, __pyx_n_s_D_LOGSTART, __pyx_n_s_D_LOGEND, __pyx_n_s_D_BINS, __pyx_n_s_M_TOL, __pyx_n_s_N_WALL, __pyx_n_s_N_MIN, __pyx_n_s_CENTER, __pyx_n_s_reduced, __pyx_n_s_shell_based); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__19); + __Pyx_GIVEREF(__pyx_tuple__19); + __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(15, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_shape_profs_shape_profs_algos_py, __pyx_n_s_calcMorphLocal, 216, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 216, __pyx_L1_error) + + /* "shape_profs/shape_profs_algos.pyx":262 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphGlobal(float[:,:] xyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int M_TOL, int N_WALL, int N_MIN, str CENTER, float SAFE, bint reduced): # <<<<<<<<<<<<<< + * """ Calculates the overall shape catalogue + * + */ + __pyx_tuple__21 = PyTuple_Pack(12, __pyx_n_s_xyz, __pyx_n_s_masses, __pyx_n_s_r200, __pyx_n_s_cat, __pyx_n_s_L_BOX, __pyx_n_s_MIN_NUMBER_PTCS, __pyx_n_s_M_TOL, __pyx_n_s_N_WALL, __pyx_n_s_N_MIN, __pyx_n_s_CENTER, __pyx_n_s_SAFE, __pyx_n_s_reduced); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__21); + __Pyx_GIVEREF(__pyx_tuple__21); + __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(12, 0, 12, 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_shape_profs_shape_profs_algos_py, __pyx_n_s_calcMorphGlobal, 262, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 262, __pyx_L1_error) + + /* "shape_profs/shape_profs_algos.pyx":303 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphLocalVelDisp(float[:,:] xyz, float[:,:] vxyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, int M_TOL, int N_WALL, int N_MIN, str CENTER, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Calculates the local velocity dispersion shape catalogue + * + */ + __pyx_tuple__23 = PyTuple_Pack(16, __pyx_n_s_xyz, __pyx_n_s_vxyz, __pyx_n_s_masses, __pyx_n_s_r200, __pyx_n_s_cat, __pyx_n_s_L_BOX, __pyx_n_s_MIN_NUMBER_PTCS, __pyx_n_s_D_LOGSTART, __pyx_n_s_D_LOGEND, __pyx_n_s_D_BINS, __pyx_n_s_M_TOL, __pyx_n_s_N_WALL, __pyx_n_s_N_MIN, __pyx_n_s_CENTER, __pyx_n_s_reduced, __pyx_n_s_shell_based); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 303, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(16, 0, 16, 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_shape_profs_shape_profs_algos_py, __pyx_n_s_calcMorphLocalVelDisp, 303, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 303, __pyx_L1_error) + + /* "shape_profs/shape_profs_algos.pyx":350 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphGlobalVelDisp(float[:,:] xyz, float[:,:] vxyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int M_TOL, int N_WALL, int N_MIN, str CENTER, float SAFE, bint reduced): # <<<<<<<<<<<<<< + * """ Calculates the global velocity dipsersion shape catalogue + * + */ + __pyx_tuple__25 = PyTuple_Pack(13, __pyx_n_s_xyz, __pyx_n_s_vxyz, __pyx_n_s_masses, __pyx_n_s_r200, __pyx_n_s_cat, __pyx_n_s_L_BOX, __pyx_n_s_MIN_NUMBER_PTCS, __pyx_n_s_M_TOL, __pyx_n_s_N_WALL, __pyx_n_s_N_MIN, __pyx_n_s_CENTER, __pyx_n_s_SAFE, __pyx_n_s_reduced); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 350, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); + __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(13, 0, 13, 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_shape_profs_shape_profs_algos_py, __pyx_n_s_calcMorphGlobalVelDisp, 350, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 350, __pyx_L1_error) + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(1, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(1, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__28); + __Pyx_GIVEREF(__pyx_tuple__28); + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(1, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__29); + __Pyx_GIVEREF(__pyx_tuple__29); + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(1, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__30); + __Pyx_GIVEREF(__pyx_tuple__30); + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(1, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__32 = 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__32)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_184977713 = PyInt_FromLong(184977713L); if (unlikely(!__pyx_int_184977713)) __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:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + generic = Py_None; Py_INCREF(Py_None); + strided = Py_None; Py_INCREF(Py_None); + indirect = Py_None; Py_INCREF(Py_None); + contiguous = Py_None; Py_INCREF(Py_None); + indirect_contiguous = Py_None; Py_INCREF(Py_None); + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __pyx_vtabptr_array = &__pyx_vtable_array; + __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview; + if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_array.tp_print = 0; + #endif + if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + __pyx_array_type = &__pyx_type___pyx_array; + if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_MemviewEnum.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error) + __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum; + __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview; + __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer; + __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice; + __pyx_vtable_memoryview.setitem_slice_assignment = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_slice_assignment; + __pyx_vtable_memoryview.setitem_slice_assign_scalar = (PyObject *(*)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_setitem_slice_assign_scalar; + __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed; + __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object; + __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object; + if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryview.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + __pyx_memoryview_type = &__pyx_type___pyx_memoryview; + __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice; + __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview; + __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object; + __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object; + __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type; + if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryviewslice.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initshape_profs_algos(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initshape_profs_algos(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_shape_profs_algos(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_shape_profs_algos(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_shape_profs_algos(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + static PyThread_type_lock __pyx_t_2[8]; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'shape_profs_algos' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_shape_profs_algos(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("shape_profs_algos", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_shape_profs__shape_profs_algos) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "shape_profs.shape_profs_algos")) { + if (unlikely(PyDict_SetItemString(modules, "shape_profs.shape_profs_algos", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "shape_profs/shape_profs_algos.pyx":6 + * + * cimport openmp + * import numpy as np # <<<<<<<<<<<<<< + * cimport cython + * from libc.math cimport sqrt + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "shape_profs/shape_profs_algos.pyx":216 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphLocal(float[:,:] xyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, int M_TOL, int N_WALL, int N_MIN, str CENTER, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Calculates the local shape catalogue + * + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11shape_profs_17shape_profs_algos_1calcMorphLocal, 0, __pyx_n_s_calcMorphLocal, NULL, __pyx_n_s_shape_profs_shape_profs_algos, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_calcMorphLocal, __pyx_t_1) < 0) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "shape_profs/shape_profs_algos.pyx":262 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphGlobal(float[:,:] xyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int M_TOL, int N_WALL, int N_MIN, str CENTER, float SAFE, bint reduced): # <<<<<<<<<<<<<< + * """ Calculates the overall shape catalogue + * + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11shape_profs_17shape_profs_algos_3calcMorphGlobal, 0, __pyx_n_s_calcMorphGlobal, NULL, __pyx_n_s_shape_profs_shape_profs_algos, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_calcMorphGlobal, __pyx_t_1) < 0) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "shape_profs/shape_profs_algos.pyx":303 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphLocalVelDisp(float[:,:] xyz, float[:,:] vxyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int D_LOGSTART, int D_LOGEND, int D_BINS, int M_TOL, int N_WALL, int N_MIN, str CENTER, bint reduced, bint shell_based): # <<<<<<<<<<<<<< + * """ Calculates the local velocity dispersion shape catalogue + * + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11shape_profs_17shape_profs_algos_5calcMorphLocalVelDisp, 0, __pyx_n_s_calcMorphLocalVelDisp, NULL, __pyx_n_s_shape_profs_shape_profs_algos, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_calcMorphLocalVelDisp, __pyx_t_1) < 0) __PYX_ERR(0, 303, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "shape_profs/shape_profs_algos.pyx":350 + * @cython.embedsignature(True) + * @cython.binding(True) + * def calcMorphGlobalVelDisp(float[:,:] xyz, float[:,:] vxyz, float[:] masses, float[:] r200, cat, float L_BOX, int MIN_NUMBER_PTCS, int M_TOL, int N_WALL, int N_MIN, str CENTER, float SAFE, bint reduced): # <<<<<<<<<<<<<< + * """ Calculates the global velocity dipsersion shape catalogue + * + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11shape_profs_17shape_profs_algos_7calcMorphGlobalVelDisp, 0, __pyx_n_s_calcMorphGlobalVelDisp, NULL, __pyx_n_s_shape_profs_shape_profs_algos, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 350, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_calcMorphGlobalVelDisp, __pyx_t_1) < 0) __PYX_ERR(0, 350, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "shape_profs/shape_profs_algos.pyx":1 + * #cython: language_level=3 # <<<<<<<<<<<<<< + * #!/usr/bin/env python3 + * # -*- coding: utf-8 -*- + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "View.MemoryView":209 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * def __dealloc__(array self): + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 209, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_array_type); + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(generic); + __Pyx_DECREF_SET(generic, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(strided); + __Pyx_DECREF_SET(strided, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(indirect); + __Pyx_DECREF_SET(indirect, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(contiguous); + __Pyx_DECREF_SET(contiguous, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(indirect_contiguous); + __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":316 + * + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<< + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ + * PyThread_allocate_lock(), + */ + __pyx_memoryview_thread_locks_used = 0; + + /* "View.MemoryView":317 + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<< + * PyThread_allocate_lock(), + * PyThread_allocate_lock(), + */ + __pyx_t_2[0] = PyThread_allocate_lock(); + __pyx_t_2[1] = PyThread_allocate_lock(); + __pyx_t_2[2] = PyThread_allocate_lock(); + __pyx_t_2[3] = PyThread_allocate_lock(); + __pyx_t_2[4] = PyThread_allocate_lock(); + __pyx_t_2[5] = PyThread_allocate_lock(); + __pyx_t_2[6] = PyThread_allocate_lock(); + __pyx_t_2[7] = PyThread_allocate_lock(); + memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_2, sizeof(__pyx_memoryview_thread_locks[0]) * (8)); + + /* "View.MemoryView":549 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_memoryview_type); + + /* "View.MemoryView":995 + * return self.from_object + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 995, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 995, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_memoryviewslice_type); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_1) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init shape_profs.shape_profs_algos", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init shape_profs.shape_profs_algos"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* 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]; +#ifdef 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 *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 *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) +{ + int first_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) + return; + if (unlikely(__pyx_get_slice_count(memview) < 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + first_time = __pyx_add_acquisition_count(memview) == 0; + if (unlikely(first_time)) { + if (have_gil) { + Py_INCREF((PyObject *) memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_INCREF((PyObject *) memview); + PyGILState_Release(_gilstate); + } + } +} +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice, + int have_gil, int lineno) { + int last_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + memslice->memview = NULL; + return; + } + if (unlikely(__pyx_get_slice_count(memview) <= 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + last_time = __pyx_sub_acquisition_count(memview) == 1; + memslice->data = NULL; + if (unlikely(last_time)) { + if (have_gil) { + Py_CLEAR(memslice->memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_CLEAR(memslice->memview); + PyGILState_Release(_gilstate); + } + } else { + memslice->memview = NULL; + } +} + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); + return 0; +} + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* None */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { + Py_ssize_t q = a / b; + Py_ssize_t r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (!j) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; + if (likely(m && m->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { + Py_ssize_t l = m->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return m->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { + PyObject *runerr; + Py_ssize_t key_value; + PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; + if (unlikely(!(m && m->sq_item))) { + PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); + return NULL; + } + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { + PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; + if (likely(m && m->mp_subscript)) { + return m->mp_subscript(obj, key); + } + return __Pyx_PyObject_GetIndex(obj, key); +} +#endif + +/* decode_c_string */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, 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)) { + Py_ssize_t length; + if (unlikely((start < 0) | (stop < 0))) { + size_t slen = strlen(cstring); + if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, + "c-string too long to convert to Python"); + return NULL; + } + length = (Py_ssize_t) slen; + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + 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); + } +} + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; icurexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; + if (unlikely(PyTuple_Check(err))) + return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); +} +#endif + +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r = __Pyx_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* ExtTypeTest */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_type == NULL || exc_info->exc_type == 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 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + #endif + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + 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 + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type, *local_value, *local_tb; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #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 = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + 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 + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 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 + const digit* digits = ((PyLongObject*)op1)->ob_digit; + const Py_ssize_t size = Py_SIZE(op1); + if (likely(__Pyx_sst_abs(size) <= 1)) { + a = likely(size) ? digits[0] : 0; + if (size == -1) a = -a; + } else { + 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; + double a = PyFloat_AS_DOUBLE(op1); + 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 + +/* None */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +} + +/* None */ +static CYTHON_INLINE long __Pyx_div_long(long a, long b) { + long q = a / b; + long r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* 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 (unlikely(!r)) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, attr_name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(attr_name)); +#endif + 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 + +/* SetVTable */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable) { +#if PY_VERSION_HEX >= 0x02070000 + PyObject *ob = PyCapsule_New(vtable, 0, 0); +#else + PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); +#endif + if (!ob) + goto bad; + if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) + goto bad; + Py_DECREF(ob); + return 0; +bad: + Py_XDECREF(ob); + return -1; +} + +/* PyObjectGetAttrStrNoError */ +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +} + +/* SetupReduce */ +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStr(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_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#else + if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#endif +#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 + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#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; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#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_GetAttrStr(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()) + PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} + +/* FetchCommonType */ +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* fake_module; + PyTypeObject* cached_type = NULL; + fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); + if (!fake_module) return NULL; + Py_INCREF(fake_module); + cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); + if (cached_type) { + if (!PyType_Check((PyObject*)cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", + type->tp_name); + goto bad; + } + if (cached_type->tp_basicsize != type->tp_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + type->tp_name); + goto bad; + } + } else { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; + } +done: + Py_DECREF(fake_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} + +/* CythonFunctionShared */ +#include +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) +{ + if (unlikely(op->func_doc == NULL)) { + if (op->func.m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp = op->func_doc; + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + op->func_doc = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + if (unlikely(op->func_name == NULL)) { +#if PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp; +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + tmp = op->func_name; + Py_INCREF(value); + op->func_name = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp; +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + tmp = op->func_qualname; + Py_INCREF(value); + op->func_qualname = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) +{ + PyObject *self; + self = m->func_closure; + if (self == NULL) + self = Py_None; + Py_INCREF(self); + return self; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp; + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + tmp = op->func_dict; + Py_INCREF(value); + op->func_dict = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { + PyObject* tmp; + if (!value) { + value = Py_None; + } else if (value != Py_None && !PyTuple_Check(value)) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + Py_INCREF(value); + tmp = op->defaults_tuple; + op->defaults_tuple = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { + PyObject* result = op->defaults_tuple; + if (unlikely(!result)) { + if (op->defaults_getter) { + if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { + PyObject* tmp; + if (!value) { + value = Py_None; + } else if (value != Py_None && !PyDict_Check(value)) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + Py_INCREF(value); + tmp = op->defaults_kwdict; + op->defaults_kwdict = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { + PyObject* result = op->defaults_kwdict; + if (unlikely(!result)) { + if (op->defaults_getter) { + if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { + PyObject* tmp; + if (!value || value == Py_None) { + value = NULL; + } else if (!PyDict_Check(value)) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + tmp = op->func_annotations; + op->func_annotations = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { + PyObject* result = op->func_annotations; + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0}, + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromString(m->func.m_ml->ml_name); +#else + return PyString_FromString(m->func.m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + if (unlikely(op == NULL)) + return NULL; + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; + op->func.m_ml = ml; + op->func.m_self = (PyObject *) op; + Py_XINCREF(closure); + op->func_closure = closure; + Py_XINCREF(module); + op->func.m_module = module; + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; + op->func_classobj = NULL; + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); + Py_CLEAR(m->func.m_module); + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); + Py_CLEAR(m->func_classobj); + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + PyObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); + Py_VISIT(m->func.m_module); + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); + Py_VISIT(m->func_classobj); + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) +{ +#if PY_MAJOR_VERSION < 3 + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { + Py_INCREF(func); + return func; + } + if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { + if (type == NULL) + type = (PyObject *)(Py_TYPE(obj)); + return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type))); + } + if (obj == Py_None) + obj = NULL; +#endif + return __Pyx_PyMethod_New(func, obj, type); +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + Py_ssize_t size; + switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { + size = PyTuple_GET_SIZE(arg); + if (likely(size == 0)) + return (*meth)(self, NULL); + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { + size = PyTuple_GET_SIZE(arg); + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags in " + "__Pyx_CyFunction_Call. METH_OLDARGS is no " + "longer supported!"); + return NULL; + } + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + return __Pyx_CyFunction_CallMethod(func, ((PyCFunctionObject*)func)->m_self, arg, kw); +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; + argc = PyTuple_GET_SIZE(args); + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, + 0, + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_CyFunction_descr_get, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, +#endif +}; +static int __pyx_CyFunction_init(void) { + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + 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); + } + return op; +} + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + 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); + PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_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 ((0)) {} + view->obj = NULL; + Py_DECREF(obj); +} +#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]; + } + 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); + } + } + *out_start = start; + *out_end = end + itemsize; +} +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); +} + +/* Capsule */ +static CYTHON_INLINE PyObject * +__pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig) +{ + PyObject *cobj; +#if PY_VERSION_HEX >= 0x02070000 + cobj = PyCapsule_New(p, sig, NULL); +#else + cobj = PyCObject_FromVoidPtr(p, NULL); +#endif + return cobj; +} + +/* Declarations */ +#if CYTHON_CCOMPLEX + #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); + } + #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 +#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; + } +#endif + +/* Arithmetic */ +#if CYTHON_CCOMPLEX +#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); + } + 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; + } + 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; + } + 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 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 + 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); + } + } + #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) { + 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 + +/* IsLittleEndian */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void) +{ + union { + uint32_t u32; + uint8_t u8[4]; + } S; + S.u32 = 0x01020304; + return S.u8[0] == 4; +} + +/* BufferFormatCheck */ +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + ctx->is_valid_array = 0; + ctx->struct_alignment = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t <= '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} +static int __Pyx_BufFmt_ExpectNumber(const char **ts) { + int number = __Pyx_BufFmt_ParseNumber(ts); + if (number == -1) + PyErr_Format(PyExc_ValueError,\ + "Does not understand character buffer dtype format string ('%c')", **ts); + return number; +} +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case '?': return "'bool'"; + case 'c': return "'char'"; + case 'b': return "'signed char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 's': case 'p': return "a string"; + case 0: return "end"; + default: return "unparseable format string"; + } +} +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +/* These are for computing the padding at the end of the struct to align + on the first member of the struct. This will probably the same as above, + but we don't have any guarantees. + */ +typedef struct { short x; char c; } __Pyx_pad_short; +typedef struct { int x; char c; } __Pyx_pad_int; +typedef struct { long x; char c; } __Pyx_pad_long; +typedef struct { float x; char c; } __Pyx_pad_float; +typedef struct { double x; char c; } __Pyx_pad_double; +typedef struct { long double x; char c; } __Pyx_pad_longdouble; +typedef struct { void *x; char c; } __Pyx_pad_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); + case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); + case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': + return 'H'; + case 'b': case 'h': case 'i': + case 'l': case 'q': case 's': case 'p': + return 'I'; + case '?': case 'B': case 'H': case 'I': case 'L': case 'Q': + return 'U'; + case 'f': case 'd': case 'g': + return (is_complex ? 'C' : 'R'); + case 'O': + return 'O'; + case 'P': + return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset, arraysize = 1; + if (ctx->enc_type == 0) return 0; + if (ctx->head->field->type->arraysize[0]) { + int i, ndim = 0; + if (ctx->enc_type == 's' || ctx->enc_type == 'p') { + ctx->is_valid_array = ctx->head->field->type->ndim == 1; + ndim = 1; + if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %zu", + ctx->head->field->type->arraysize[0], ctx->enc_count); + return -1; + } + } + if (!ctx->is_valid_array) { + PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", + ctx->head->field->type->ndim, ndim); + return -1; + } + for (i = 0; i < ctx->head->field->type->ndim; i++) { + arraysize *= ctx->head->field->type->arraysize[i]; + } + ctx->is_valid_array = 0; + ctx->enc_count = 1; + } + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + if (ctx->struct_alignment == 0) + ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, + ctx->is_complex); + } + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + if ((type->typegroup == 'H' || group == 'H') && type->size == size) { + } else { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + } + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + ctx->fmt_offset += size; + if (arraysize) + ctx->fmt_offset += (arraysize - 1) * size; + --ctx->enc_count; + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} +static PyObject * +__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) +{ + const char *ts = *tsp; + int i = 0, number, ndim; + ++ts; + if (ctx->new_count != 1) { + PyErr_SetString(PyExc_ValueError, + "Cannot handle repeated arrays in format string"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ndim = ctx->head->field->type->ndim; + while (*ts && *ts != ')') { + switch (*ts) { + case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; + default: break; + } + number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) + return PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + if (*ts != ',' && *ts != ')') + return PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + if (*ts == ',') ts++; + i++; + } + if (i != ndim) + return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return NULL; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return Py_None; +} +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case '\r': + case '\n': + ++ts; + break; + case '<': + if (!__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + size_t struct_alignment = ctx->struct_alignment; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + ctx->enc_count = 0; + ctx->struct_alignment = 0; + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + if (struct_alignment) ctx->struct_alignment = struct_alignment; + } + break; + case '}': + { + size_t alignment = ctx->struct_alignment; + ++ts; + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + if (alignment && ctx->fmt_offset % alignment) { + ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); + } + } + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } + CYTHON_FALLTHROUGH; + case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': case 'p': + if ((ctx->enc_type == *ts) && (got_Z == ctx->is_complex) && + (ctx->enc_packmode == ctx->new_packmode) && (!ctx->is_valid_array)) { + ctx->enc_count += ctx->new_count; + ctx->new_count = 1; + got_Z = 0; + ++ts; + break; + } + CYTHON_FALLTHROUGH; + case 's': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + case '(': + if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; + } + } + } +} + +/* 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; + } + } + if (a->ndim) { + for (i = 0; i < a->ndim; i++) + if (a->arraysize[i] != b->arraysize[i]) + return 0; + } + 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; + } + } + 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; + } + } + 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; + } + } + return 1; +fail: + return 0; +} +static int +__pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec) +{ + 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; + } + } + 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; + } + } + 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]; + } + } 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]; + } + } + 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 (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_dsds_float(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), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 2, + &__Pyx_TypeInfo_float, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_float(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; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_float, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* 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;\ + } + +/* 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; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* CIntFromPy */ + static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) { + const char neg_one = (char) ((char) 0 - (char) 1), const_zero = (char) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(char) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (char) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (char) 0; + case 1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0]) + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) { + return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) { + return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) >= 4 * PyLong_SHIFT) { + return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (char) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(char) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (char) 0; + case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(char, digit, +digits[0]) + case -2: + if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + } +#endif + if (sizeof(char) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + char val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (char) -1; + } + } else { + char val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (char) -1; + val = __Pyx_PyInt_As_char(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to char"); + return (char) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to char"); + return (char) -1; +} + +/* CheckBinaryVersion */ + static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + return PyErr_WarnEx(NULL, message, 1); + } + return 0; +} + +/* InitStrings */ + static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/cosmic_profiles/for_docs/shape_profs/shape_profs_algos.so b/cosmic_profiles/for_docs/shape_profs/shape_profs_algos.so new file mode 100755 index 0000000000000000000000000000000000000000..9e10b9a4fa0aca902a571d4d605ebb20683a3441 GIT binary patch literal 1438640 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 z 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�htx!P8_HM+C#J!MjUWA#AuKs4)6}zrUEA) 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

  • ~E^V~>eZzQ*EWOfU~ljp(&dYs*KhcS< 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 +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__gadget_hdf5__gen_catalogues +#define __PYX_HAVE_API__gadget_hdf5__gen_catalogues +/* Early includes */ +#include +#include "pythread.h" +#include +#include +#include +#include "pystate.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +static const char *__pyx_f[] = { + "gadget_hdf5/gen_catalogues.pyx", + "stringsource", +}; +/* MemviewSliceStruct.proto */ +struct __pyx_memoryview_obj; +typedef struct { + struct __pyx_memoryview_obj *memview; + char *data; + Py_ssize_t shape[8]; + Py_ssize_t strides[8]; + Py_ssize_t suboffsets[8]; +} __Pyx_memviewslice; +#define __Pyx_MemoryView_Len(m) (m.shape[0]) + +/* Atomics.proto */ +#include +#ifndef CYTHON_ATOMICS + #define CYTHON_ATOMICS 1 +#endif +#define __pyx_atomic_int_type int +#if CYTHON_ATOMICS && __GNUC__ >= 4 && (__GNUC_MINOR__ > 1 ||\ + (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL >= 2)) &&\ + !defined(__i386__) + #define __pyx_atomic_incr_aligned(value, lock) __sync_fetch_and_add(value, 1) + #define __pyx_atomic_decr_aligned(value, lock) __sync_fetch_and_sub(value, 1) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using GNU atomics" + #endif +#elif CYTHON_ATOMICS && defined(_MSC_VER) && 0 + #include + #undef __pyx_atomic_int_type + #define __pyx_atomic_int_type LONG + #define __pyx_atomic_incr_aligned(value, lock) InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #pragma message ("Using MSVC atomics") + #endif +#elif CYTHON_ATOMICS && (defined(__ICC) || defined(__INTEL_COMPILER)) && 0 + #define __pyx_atomic_incr_aligned(value, lock) _InterlockedIncrement(value) + #define __pyx_atomic_decr_aligned(value, lock) _InterlockedDecrement(value) + #ifdef __PYX_DEBUG_ATOMICS + #warning "Using Intel atomics" + #endif +#else + #undef CYTHON_ATOMICS + #define CYTHON_ATOMICS 0 + #ifdef __PYX_DEBUG_ATOMICS + #warning "Not using atomics" + #endif +#endif +typedef volatile __pyx_atomic_int_type __pyx_atomic_int; +#if CYTHON_ATOMICS + #define __pyx_add_acquisition_count(memview)\ + __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) +#else + #define __pyx_add_acquisition_count(memview)\ + __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) + #define __pyx_sub_acquisition_count(memview)\ + __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) +#endif + +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* NoFastGil.proto */ +#define __Pyx_PyGILState_Ensure PyGILState_Ensure +#define __Pyx_PyGILState_Release PyGILState_Release +#define __Pyx_FastGIL_Remember() +#define __Pyx_FastGIL_Forget() +#define __Pyx_FastGilFuncInit() + +/* BufferFormatStructs.proto */ +#define IS_UNSIGNED(type) (((type) -1) > 0) +struct __Pyx_StructField_; +#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) +typedef struct { + const char* name; + struct __Pyx_StructField_* fields; + size_t size; + size_t arraysize[8]; + int ndim; + char typegroup; + char is_unsigned; + int flags; +} __Pyx_TypeInfo; +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + size_t new_count, enc_count; + size_t struct_alignment; + int is_complex; + char enc_type; + char new_packmode; + char enc_packmode; + char is_valid_array; +} __Pyx_BufFmt_Context; + + +/*--- Type declarations ---*/ +struct __pyx_array_obj; +struct __pyx_MemviewEnum_obj; +struct __pyx_memoryview_obj; +struct __pyx_memoryviewslice_obj; + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ +struct __pyx_array_obj { + PyObject_HEAD + struct __pyx_vtabstruct_array *__pyx_vtab; + char *data; + Py_ssize_t len; + char *format; + int ndim; + Py_ssize_t *_shape; + Py_ssize_t *_strides; + Py_ssize_t itemsize; + PyObject *mode; + PyObject *_format; + void (*callback_free_data)(void *); + int free_data; + int dtype_is_object; +}; + + +/* "View.MemoryView":279 + * + * @cname('__pyx_MemviewEnum') + * cdef class Enum(object): # <<<<<<<<<<<<<< + * cdef object name + * def __init__(self, name): + */ +struct __pyx_MemviewEnum_obj { + PyObject_HEAD + PyObject *name; +}; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ +struct __pyx_memoryview_obj { + PyObject_HEAD + struct __pyx_vtabstruct_memoryview *__pyx_vtab; + PyObject *obj; + PyObject *_size; + PyObject *_array_interface; + PyThread_type_lock lock; + __pyx_atomic_int acquisition_count[2]; + __pyx_atomic_int *acquisition_count_aligned_p; + Py_buffer view; + int flags; + int dtype_is_object; + __Pyx_TypeInfo *typeinfo; +}; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ +struct __pyx_memoryviewslice_obj { + struct __pyx_memoryview_obj __pyx_base; + __Pyx_memviewslice from_slice; + PyObject *from_object; + PyObject *(*to_object_func)(char *); + int (*to_dtype_func)(char *, PyObject *); +}; + + + +/* "View.MemoryView":105 + * + * @cname("__pyx_array") + * cdef class array: # <<<<<<<<<<<<<< + * + * cdef: + */ + +struct __pyx_vtabstruct_array { + PyObject *(*get_memview)(struct __pyx_array_obj *); +}; +static struct __pyx_vtabstruct_array *__pyx_vtabptr_array; + + +/* "View.MemoryView":330 + * + * @cname('__pyx_memoryview') + * cdef class memoryview(object): # <<<<<<<<<<<<<< + * + * cdef object obj + */ + +struct __pyx_vtabstruct_memoryview { + char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *); + PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); + PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *); + PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *); +}; +static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview; + + +/* "View.MemoryView":965 + * + * @cname('__pyx_memoryviewslice') + * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< + * "Internal class for passing memoryview slices to Python" + * + */ + +struct __pyx_vtabstruct__memoryviewslice { + struct __pyx_vtabstruct_memoryview __pyx_base; +}; +static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* MemviewSliceInit.proto */ +#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d +#define __Pyx_MEMVIEW_DIRECT 1 +#define __Pyx_MEMVIEW_PTR 2 +#define __Pyx_MEMVIEW_FULL 4 +#define __Pyx_MEMVIEW_CONTIG 8 +#define __Pyx_MEMVIEW_STRIDED 16 +#define __Pyx_MEMVIEW_FOLLOW 32 +#define __Pyx_IS_C_CONTIG 1 +#define __Pyx_IS_F_CONTIG 2 +static int __Pyx_init_memviewslice( + struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference); +static CYTHON_INLINE int __pyx_add_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( + __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); +#define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p) +#define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview)) +#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) +#define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__) +static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* StrEquals.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals +#else +#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +#endif + +/* None.proto */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); + +/* UnaryNegOverflows.proto */ +#define UNARY_NEG_WOULD_OVERFLOW(x)\ + (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) + +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/ +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* 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_string.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, 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)); + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* RaiseNoneIterError.proto */ +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 +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) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +static CYTHON_UNUSED 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 +static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len)) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) +#endif + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* ListExtend.proto */ +static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { +#if CYTHON_COMPILING_IN_CPYTHON + PyObject* none = _PyList_Extend((PyListObject*)L, v); + if (unlikely(!none)) + return -1; + Py_DECREF(none); + return 0; +#else + return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); +#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); + PyList_SET_ITEM(list, len, x); + __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 + +/* None.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); + +/* None.proto */ +static CYTHON_INLINE long __Pyx_div_long(long, long); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* SetVTable.proto */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable); + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* SetupReduce.proto */ +static int __Pyx_setup_reduce(PyObject* type_obj); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +#if PY_MAJOR_VERSION < 3 + static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); + static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else + #define __Pyx_GetBuffer PyObject_GetBuffer + #define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + + +/* BufferStructDeclare.proto */ +typedef struct { + Py_ssize_t shape, strides, suboffsets; +} __Pyx_Buf_DimInfo; +typedef struct { + size_t refcount; + Py_buffer pybuffer; +} __Pyx_Buffer; +typedef struct { + __Pyx_Buffer *rcbuffer; + char *data; + __Pyx_Buf_DimInfo diminfo[8]; +} __Pyx_LocalBuf_ND; + +/* MemviewSliceIsContig.proto */ +static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim); + +/* OverlappingSlices.proto */ +static int __pyx_slices_overlap(__Pyx_memviewslice *slice1, + __Pyx_memviewslice *slice2, + int ndim, size_t itemsize); + +/* Capsule.proto */ +static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig); + +/* IsLittleEndian.proto */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); + +/* BufferFormatCheck.proto */ +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts); +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type); + +/* TypeInfoCompare.proto */ +static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b); + +/* MemviewSliceValidateAndInit.proto */ +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); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_int(PyObject *, int writable_flag); + +/* ObjectToMemviewSlice.proto */ +static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_float(PyObject *, int writable_flag); + +/* MemviewSliceCopyTemplate.proto */ +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); + +/* 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); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *); + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/ +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/ +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/ +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ + +/* Module declarations from 'cython.view' */ + +/* Module declarations from 'cython' */ + +/* Module declarations from 'openmp' */ + +/* Module declarations from 'gadget_hdf5.gen_catalogues' */ +static PyTypeObject *__pyx_array_type = 0; +static PyTypeObject *__pyx_MemviewEnum_type = 0; +static PyTypeObject *__pyx_memoryview_type = 0; +static PyTypeObject *__pyx_memoryviewslice_type = 0; +static PyObject *generic = 0; +static PyObject *strided = 0; +static PyObject *indirect = 0; +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 struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/ +static void *__pyx_align_pointer(void *, size_t); /*proto*/ +static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/ +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/ +static PyObject *_unellipsify(PyObject *, int); /*proto*/ +static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/ +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/ +static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/ +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/ +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ +static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/ +static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/ +static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/ +static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/ +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/ +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/ +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/ +static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/ +static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/ +static int __pyx_memoryview_err(PyObject *, char *); /*proto*/ +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/ +static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/ +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_float = { "float", NULL, sizeof(float), { 0 }, 0, 'R', 0, 0 }; +#define __Pyx_MODULE_NAME "gadget_hdf5.gen_catalogues" +extern int __pyx_module_is_main_gadget_hdf5__gen_catalogues; +int __pyx_module_is_main_gadget_hdf5__gen_catalogues = 0; + +/* Implementation of 'gadget_hdf5.gen_catalogues' */ +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_MemoryError; +static PyObject *__pyx_builtin_enumerate; +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_Ellipsis; +static PyObject *__pyx_builtin_id; +static PyObject *__pyx_builtin_IndexError; +static const char __pyx_k_O[] = "O"; +static const char __pyx_k_c[] = "c"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_new[] = "__new__"; +static const char __pyx_k_obj[] = "obj"; +static const char __pyx_k_base[] = "base"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mode[] = "mode"; +static const char __pyx_k_name[] = "name"; +static const char __pyx_k_ndim[] = "ndim"; +static const char __pyx_k_pack[] = "pack"; +static const char __pyx_k_size[] = "size"; +static const char __pyx_k_step[] = "step"; +static const char __pyx_k_stop[] = "stop"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_ASCII[] = "ASCII"; +static const char __pyx_k_class[] = "__class__"; +static const char __pyx_k_error[] = "error"; +static const char __pyx_k_flags[] = "flags"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_range[] = "range"; +static const char __pyx_k_shape[] = "shape"; +static const char __pyx_k_start[] = "start"; +static const char __pyx_k_encode[] = "encode"; +static const char __pyx_k_format[] = "format"; +static const char __pyx_k_h_idxs[] = "h_idxs"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_name_2[] = "__name__"; +static const char __pyx_k_nb_shs[] = "nb_shs"; +static const char __pyx_k_pickle[] = "pickle"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_sh_len[] = "sh_len"; +static const char __pyx_k_struct[] = "struct"; +static const char __pyx_k_unpack[] = "unpack"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_fortran[] = "fortran"; +static const char __pyx_k_memview[] = "memview"; +static const char __pyx_k_Ellipsis[] = "Ellipsis"; +static const char __pyx_k_csh_size[] = "csh_size"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_itemsize[] = "itemsize"; +static const char __pyx_k_pyx_type[] = "__pyx_type"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_TypeError[] = "TypeError"; +static const char __pyx_k_calcGxCat[] = "calcGxCat"; +static const char __pyx_k_enumerate[] = "enumerate"; +static const char __pyx_k_pyx_state[] = "__pyx_state"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_sh_len_gx[] = "sh_len_gx"; +static const char __pyx_k_start_idx[] = "start_idx"; +static const char __pyx_k_IndexError[] = "IndexError"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_calcCSHCat[] = "calcCSHCat"; +static const char __pyx_k_group_r200[] = "group_r200"; +static const char __pyx_k_pyx_result[] = "__pyx_result"; +static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; +static const char __pyx_k_MemoryError[] = "MemoryError"; +static const char __pyx_k_PickleError[] = "PickleError"; +static const char __pyx_k_calcCSHIdxs[] = "calcCSHIdxs"; +static const char __pyx_k_fof_dm_size[] = "fof_dm_size"; +static const char __pyx_k_fof_gx_size[] = "fof_gx_size"; +static const char __pyx_k_halo_masses[] = "halo_masses"; +static const char __pyx_k_fof_dm_sizes[] = "fof_dm_sizes"; +static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; +static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_View_MemoryView[] = "View.MemoryView"; +static const char __pyx_k_allocate_buffer[] = "allocate_buffer"; +static const char __pyx_k_dtype_is_object[] = "dtype_is_object"; +static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum"; +static const char __pyx_k_MIN_NUMBER_DM_PTCS[] = "MIN_NUMBER_DM_PTCS"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_strided_and_direct[] = ""; +static const char __pyx_k_MIN_NUMBER_STAR_PTCS[] = "MIN_NUMBER_STAR_PTCS"; +static const char __pyx_k_strided_and_indirect[] = ""; +static const char __pyx_k_contiguous_and_direct[] = ""; +static const char __pyx_k_MemoryView_of_r_object[] = ""; +static const char __pyx_k_MemoryView_of_r_at_0x_x[] = ""; +static const char __pyx_k_contiguous_and_indirect[] = ""; +static const char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'"; +static const char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d."; +static const char __pyx_k_gadget_hdf5_gen_catalogues[] = "gadget_hdf5.gen_catalogues"; +static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array"; +static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data."; +static const char __pyx_k_gadget_hdf5_gen_catalogues_pyx[] = "gadget_hdf5/gen_catalogues.pyx"; +static const char __pyx_k_strided_and_direct_or_indirect[] = ""; +static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides"; +static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory."; +static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview"; +static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview"; +static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array"; +static const char __pyx_k_Incompatible_checksums_s_vs_0xb0[] = "Incompatible checksums (%s vs 0xb068931 = (name))"; +static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported"; +static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got %s"; +static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis %d)"; +static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object"; +static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension %d (got %d and %d)"; +static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__"; +static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides."; +static PyObject *__pyx_n_s_ASCII; +static PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri; +static PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is; +static PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor; +static PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi; +static PyObject *__pyx_kp_s_Cannot_index_with_type_s; +static PyObject *__pyx_n_s_Ellipsis; +static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xb0; +static PyObject *__pyx_n_s_IndexError; +static PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte; +static PyObject *__pyx_kp_s_Invalid_mode_expected_c_or_fortr; +static PyObject *__pyx_kp_s_Invalid_shape_in_axis_d_d; +static PyObject *__pyx_n_s_MIN_NUMBER_DM_PTCS; +static PyObject *__pyx_n_s_MIN_NUMBER_STAR_PTCS; +static PyObject *__pyx_n_s_MemoryError; +static PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x; +static PyObject *__pyx_kp_s_MemoryView_of_r_object; +static PyObject *__pyx_n_b_O; +static PyObject *__pyx_kp_s_Out_of_bounds_on_buffer_access_a; +static PyObject *__pyx_n_s_PickleError; +static PyObject *__pyx_n_s_TypeError; +static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object; +static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_n_s_View_MemoryView; +static PyObject *__pyx_n_s_allocate_buffer; +static PyObject *__pyx_n_s_base; +static PyObject *__pyx_n_s_c; +static PyObject *__pyx_n_u_c; +static PyObject *__pyx_n_s_calcCSHCat; +static PyObject *__pyx_n_s_calcCSHIdxs; +static PyObject *__pyx_n_s_calcGxCat; +static PyObject *__pyx_n_s_class; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_kp_s_contiguous_and_direct; +static PyObject *__pyx_kp_s_contiguous_and_indirect; +static PyObject *__pyx_n_s_csh_size; +static PyObject *__pyx_n_s_dict; +static PyObject *__pyx_n_s_dtype_is_object; +static PyObject *__pyx_n_s_encode; +static PyObject *__pyx_n_s_enumerate; +static PyObject *__pyx_n_s_error; +static PyObject *__pyx_n_s_flags; +static PyObject *__pyx_n_s_fof_dm_size; +static PyObject *__pyx_n_s_fof_dm_sizes; +static PyObject *__pyx_n_s_fof_gx_size; +static PyObject *__pyx_n_s_format; +static PyObject *__pyx_n_s_fortran; +static PyObject *__pyx_n_u_fortran; +static PyObject *__pyx_n_s_gadget_hdf5_gen_catalogues; +static PyObject *__pyx_kp_s_gadget_hdf5_gen_catalogues_pyx; +static PyObject *__pyx_n_s_getstate; +static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi; +static PyObject *__pyx_n_s_group_r200; +static PyObject *__pyx_n_s_h_idxs; +static PyObject *__pyx_n_s_halo_masses; +static PyObject *__pyx_n_s_id; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_itemsize; +static PyObject *__pyx_kp_s_itemsize_0_for_cython_array; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_memview; +static PyObject *__pyx_n_s_mode; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_name_2; +static PyObject *__pyx_n_s_nb_shs; +static PyObject *__pyx_n_s_ndim; +static PyObject *__pyx_n_s_new; +static PyObject *__pyx_kp_s_no_default___reduce___due_to_non; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_numpy; +static PyObject *__pyx_n_s_obj; +static PyObject *__pyx_n_s_pack; +static PyObject *__pyx_n_s_pickle; +static PyObject *__pyx_n_s_pyx_PickleError; +static PyObject *__pyx_n_s_pyx_checksum; +static PyObject *__pyx_n_s_pyx_getbuffer; +static PyObject *__pyx_n_s_pyx_result; +static PyObject *__pyx_n_s_pyx_state; +static PyObject *__pyx_n_s_pyx_type; +static PyObject *__pyx_n_s_pyx_unpickle_Enum; +static PyObject *__pyx_n_s_pyx_vtable; +static PyObject *__pyx_n_s_range; +static PyObject *__pyx_n_s_reduce; +static PyObject *__pyx_n_s_reduce_cython; +static PyObject *__pyx_n_s_reduce_ex; +static PyObject *__pyx_n_s_setstate; +static PyObject *__pyx_n_s_setstate_cython; +static PyObject *__pyx_n_s_sh_len; +static PyObject *__pyx_n_s_sh_len_gx; +static PyObject *__pyx_n_s_shape; +static PyObject *__pyx_n_s_size; +static PyObject *__pyx_n_s_start; +static PyObject *__pyx_n_s_start_idx; +static PyObject *__pyx_n_s_step; +static PyObject *__pyx_n_s_stop; +static PyObject *__pyx_kp_s_strided_and_direct; +static PyObject *__pyx_kp_s_strided_and_direct_or_indirect; +static PyObject *__pyx_kp_s_strided_and_indirect; +static PyObject *__pyx_kp_s_stringsource; +static PyObject *__pyx_n_s_struct; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_kp_s_unable_to_allocate_array_data; +static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str; +static PyObject *__pyx_n_s_unpack; +static PyObject *__pyx_n_s_update; +static PyObject *__pyx_pf_11gadget_hdf5_14gen_catalogues_calcCSHIdxs(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_h_idxs, CYTHON_UNUSED int __pyx_v_start_idx, CYTHON_UNUSED int __pyx_v_fof_dm_size, CYTHON_UNUSED int __pyx_v_nb_shs, CYTHON_UNUSED int __pyx_v_csh_size, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_DM_PTCS); /* proto */ +static PyObject *__pyx_pf_11gadget_hdf5_14gen_catalogues_2calcGxCat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_nb_shs, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_sh_len_gx, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_fof_gx_size, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_STAR_PTCS); /* proto */ +static PyObject *__pyx_pf_11gadget_hdf5_14gen_catalogues_4calcCSHCat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_nb_shs, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_sh_len, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_fof_dm_sizes, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_group_r200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_halo_masses, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_DM_PTCS); /* proto */ +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 */ +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */ +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */ +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */ +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */ +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ +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 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*/ +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_1; +static PyObject *__pyx_int_184977713; +static PyObject *__pyx_int_neg_1; +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__4; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__6; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_tuple__8; +static PyObject *__pyx_tuple__9; +static PyObject *__pyx_slice__15; +static PyObject *__pyx_tuple__10; +static PyObject *__pyx_tuple__11; +static PyObject *__pyx_tuple__12; +static PyObject *__pyx_tuple__13; +static PyObject *__pyx_tuple__14; +static PyObject *__pyx_tuple__16; +static PyObject *__pyx_tuple__17; +static PyObject *__pyx_tuple__18; +static PyObject *__pyx_tuple__19; +static PyObject *__pyx_tuple__21; +static PyObject *__pyx_tuple__23; +static PyObject *__pyx_tuple__25; +static PyObject *__pyx_tuple__26; +static PyObject *__pyx_tuple__27; +static PyObject *__pyx_tuple__28; +static PyObject *__pyx_tuple__29; +static PyObject *__pyx_tuple__30; +static PyObject *__pyx_codeobj__20; +static PyObject *__pyx_codeobj__22; +static PyObject *__pyx_codeobj__24; +static PyObject *__pyx_codeobj__31; +/* Late includes */ + +/* "gadget_hdf5/gen_catalogues.pyx":11 + * + * @cython.embedsignature(True) + * def calcCSHIdxs(int[:] h_idxs, int start_idx, int fof_dm_size, int nb_shs, int csh_size, int MIN_NUMBER_DM_PTCS): # <<<<<<<<<<<<<< + * """ Return the indices of the DM particles that belong to the CSH + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11gadget_hdf5_14gen_catalogues_1calcCSHIdxs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_11gadget_hdf5_14gen_catalogues_calcCSHIdxs[] = "calcCSHIdxs(int[:] h_idxs, int start_idx, int fof_dm_size, int nb_shs, int csh_size, int MIN_NUMBER_DM_PTCS)\n Return the indices of the DM particles that belong to the CSH\n \n :param h_idxs: array to store the indices\n :type h_idxs: int array\n :param start_idx: first index that belongs to this CSH\n :type start_idx: int\n :param fof_dm_size: number of DM particles in the FoF-halos\n :type fof_dm_size: (N1,) ints\n :param nb_shs: number of SHs in each FoF-halo\n :type nb_shs: (N1,) ints\n :param csh_size: number of DM particles in the SHs\n :type csh_size: (N2,) ints\n :param MIN_NUMBER_DM_PTCS: minimum number of DM particles for CSH to be valid\n :type MIN_NUMBER_DM_PTCS: int\n :return: h_idxs filled partially with indices (+1, to allow 0 to be interpreted as no index)\n :rtype: int array"; +static PyMethodDef __pyx_mdef_11gadget_hdf5_14gen_catalogues_1calcCSHIdxs = {"calcCSHIdxs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11gadget_hdf5_14gen_catalogues_1calcCSHIdxs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11gadget_hdf5_14gen_catalogues_calcCSHIdxs}; +static PyObject *__pyx_pw_11gadget_hdf5_14gen_catalogues_1calcCSHIdxs(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_h_idxs = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED int __pyx_v_start_idx; + CYTHON_UNUSED int __pyx_v_fof_dm_size; + CYTHON_UNUSED int __pyx_v_nb_shs; + CYTHON_UNUSED int __pyx_v_csh_size; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_DM_PTCS; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcCSHIdxs (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_h_idxs,&__pyx_n_s_start_idx,&__pyx_n_s_fof_dm_size,&__pyx_n_s_nb_shs,&__pyx_n_s_csh_size,&__pyx_n_s_MIN_NUMBER_DM_PTCS,0}; + PyObject* values[6] = {0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_h_idxs)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start_idx)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcCSHIdxs", 1, 6, 6, 1); __PYX_ERR(0, 11, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fof_dm_size)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcCSHIdxs", 1, 6, 6, 2); __PYX_ERR(0, 11, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nb_shs)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcCSHIdxs", 1, 6, 6, 3); __PYX_ERR(0, 11, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_csh_size)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcCSHIdxs", 1, 6, 6, 4); __PYX_ERR(0, 11, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_DM_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcCSHIdxs", 1, 6, 6, 5); __PYX_ERR(0, 11, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcCSHIdxs") < 0)) __PYX_ERR(0, 11, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + } + __pyx_v_h_idxs = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_h_idxs.memview)) __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_v_start_idx = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_start_idx == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_v_fof_dm_size = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_fof_dm_size == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_v_nb_shs = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_nb_shs == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_v_csh_size = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_csh_size == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_v_MIN_NUMBER_DM_PTCS = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_MIN_NUMBER_DM_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcCSHIdxs", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 11, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("gadget_hdf5.gen_catalogues.calcCSHIdxs", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_11gadget_hdf5_14gen_catalogues_calcCSHIdxs(__pyx_self, __pyx_v_h_idxs, __pyx_v_start_idx, __pyx_v_fof_dm_size, __pyx_v_nb_shs, __pyx_v_csh_size, __pyx_v_MIN_NUMBER_DM_PTCS); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11gadget_hdf5_14gen_catalogues_calcCSHIdxs(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_h_idxs, CYTHON_UNUSED int __pyx_v_start_idx, CYTHON_UNUSED int __pyx_v_fof_dm_size, CYTHON_UNUSED int __pyx_v_nb_shs, CYTHON_UNUSED int __pyx_v_csh_size, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_DM_PTCS) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcCSHIdxs", 0); + + /* "gadget_hdf5/gen_catalogues.pyx":29 + * :rtype: int array""" + * + * return # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "gadget_hdf5/gen_catalogues.pyx":11 + * + * @cython.embedsignature(True) + * def calcCSHIdxs(int[:] h_idxs, int start_idx, int fof_dm_size, int nb_shs, int csh_size, int MIN_NUMBER_DM_PTCS): # <<<<<<<<<<<<<< + * """ Return the indices of the DM particles that belong to the CSH + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_h_idxs, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "gadget_hdf5/gen_catalogues.pyx":32 + * + * @cython.embedsignature(True) + * def calcGxCat(int[:] nb_shs, int[:] sh_len_gx, int[:] fof_gx_size, int MIN_NUMBER_STAR_PTCS): # <<<<<<<<<<<<<< + * """ Construct galaxy catalogue + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11gadget_hdf5_14gen_catalogues_3calcGxCat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_11gadget_hdf5_14gen_catalogues_2calcGxCat[] = "calcGxCat(int[:] nb_shs, int[:] sh_len_gx, int[:] fof_gx_size, int MIN_NUMBER_STAR_PTCS)\n Construct galaxy catalogue\n \n Note that the indices returned in each gx are 'true index + 1'\n \n :param nb_shs: number of SHs in each FoF-halo\n :type nb_shs: (N1,) ints\n :param sh_len_gx: number of star particles in each subhalo\n :type sh_len_gx: (N2,) ints, N2>N1\n :param fof_gx_size: number of star particles in the FoF-halos\n :type fof_gx_size: (N1,) ints\n :param MIN_NUMBER_STAR_PTCS: minimum number of star particles for gx to be valid\n :type MIN_NUMBER_STAR_PTCS: int\n :return: galaxy catalogue, containing indices of star particles belong to each galaxy\n :rtype: list of N1 int lists containing indices"; +static PyMethodDef __pyx_mdef_11gadget_hdf5_14gen_catalogues_3calcGxCat = {"calcGxCat", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11gadget_hdf5_14gen_catalogues_3calcGxCat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11gadget_hdf5_14gen_catalogues_2calcGxCat}; +static PyObject *__pyx_pw_11gadget_hdf5_14gen_catalogues_3calcGxCat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_nb_shs = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_sh_len_gx = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_fof_gx_size = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_STAR_PTCS; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcGxCat (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nb_shs,&__pyx_n_s_sh_len_gx,&__pyx_n_s_fof_gx_size,&__pyx_n_s_MIN_NUMBER_STAR_PTCS,0}; + PyObject* values[4] = {0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nb_shs)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sh_len_gx)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcGxCat", 1, 4, 4, 1); __PYX_ERR(0, 32, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fof_gx_size)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcGxCat", 1, 4, 4, 2); __PYX_ERR(0, 32, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_STAR_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcGxCat", 1, 4, 4, 3); __PYX_ERR(0, 32, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcGxCat") < 0)) __PYX_ERR(0, 32, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + } + __pyx_v_nb_shs = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_nb_shs.memview)) __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_v_sh_len_gx = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sh_len_gx.memview)) __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_v_fof_gx_size = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_fof_gx_size.memview)) __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_v_MIN_NUMBER_STAR_PTCS = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_MIN_NUMBER_STAR_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 32, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcGxCat", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 32, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("gadget_hdf5.gen_catalogues.calcGxCat", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_11gadget_hdf5_14gen_catalogues_2calcGxCat(__pyx_self, __pyx_v_nb_shs, __pyx_v_sh_len_gx, __pyx_v_fof_gx_size, __pyx_v_MIN_NUMBER_STAR_PTCS); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11gadget_hdf5_14gen_catalogues_2calcGxCat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_nb_shs, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_sh_len_gx, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_fof_gx_size, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_STAR_PTCS) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcGxCat", 0); + + /* "gadget_hdf5/gen_catalogues.pyx":47 + * :return: galaxy catalogue, containing indices of star particles belong to each galaxy + * :rtype: list of N1 int lists containing indices""" + * return # <<<<<<<<<<<<<< + * + * @cython.embedsignature(True) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "gadget_hdf5/gen_catalogues.pyx":32 + * + * @cython.embedsignature(True) + * def calcGxCat(int[:] nb_shs, int[:] sh_len_gx, int[:] fof_gx_size, int MIN_NUMBER_STAR_PTCS): # <<<<<<<<<<<<<< + * """ Construct galaxy catalogue + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_nb_shs, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_sh_len_gx, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_fof_gx_size, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "gadget_hdf5/gen_catalogues.pyx":50 + * + * @cython.embedsignature(True) + * def calcCSHCat(int[:] nb_shs, int[:] sh_len, int[:] fof_dm_sizes, float[:] group_r200, float[:] halo_masses, int MIN_NUMBER_DM_PTCS): # <<<<<<<<<<<<<< + * """ Construct central subhalo (CSH) catalogue from FoF/SH info + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11gadget_hdf5_14gen_catalogues_5calcCSHCat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_11gadget_hdf5_14gen_catalogues_4calcCSHCat[] = "calcCSHCat(int[:] nb_shs, int[:] sh_len, int[:] fof_dm_sizes, float[:] group_r200, float[:] halo_masses, int MIN_NUMBER_DM_PTCS)\n Construct central subhalo (CSH) catalogue from FoF/SH info\n \n Note that the indices returned in each CSH are 'true index + 1'\n \n :param nb_shs: number of SHs in each FoF-halo\n :type nb_shs: (N1,) ints\n :param sh_len: number of DM particles in each subhalo\n :type sh_len: (N2,) ints, N2>N1\n :param fof_dm_size: number of particles in the FoF-halos\n :type fof_dm_size: (N1,) ints\n :param group_r200: R200-radius of FoF-halos\n :type group_r200: (N1,) floats\n :param halo_masses: masses of FoF-halos\n :type halo_masses: (N1,) floats\n :param MIN_NUMBER_DM_PTCS: minimum number of DM particles for CSH to be valid\n :type MIN_NUMBER_DM_PTCS: int\n :return: h_cat: indices (+1, to allow 0 to be interpreted as no index),\n h_r200: R200-radii, h_pass: passed `MIN_NUMBER_DM_PTCS`-threshold or not\n :rtype: int array, float array, int array"; +static PyMethodDef __pyx_mdef_11gadget_hdf5_14gen_catalogues_5calcCSHCat = {"calcCSHCat", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11gadget_hdf5_14gen_catalogues_5calcCSHCat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11gadget_hdf5_14gen_catalogues_4calcCSHCat}; +static PyObject *__pyx_pw_11gadget_hdf5_14gen_catalogues_5calcCSHCat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_nb_shs = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_sh_len = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_fof_dm_sizes = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_group_r200 = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED __Pyx_memviewslice __pyx_v_halo_masses = { 0, 0, { 0 }, { 0 }, { 0 } }; + CYTHON_UNUSED int __pyx_v_MIN_NUMBER_DM_PTCS; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcCSHCat (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nb_shs,&__pyx_n_s_sh_len,&__pyx_n_s_fof_dm_sizes,&__pyx_n_s_group_r200,&__pyx_n_s_halo_masses,&__pyx_n_s_MIN_NUMBER_DM_PTCS,0}; + PyObject* values[6] = {0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nb_shs)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sh_len)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcCSHCat", 1, 6, 6, 1); __PYX_ERR(0, 50, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fof_dm_sizes)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcCSHCat", 1, 6, 6, 2); __PYX_ERR(0, 50, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group_r200)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcCSHCat", 1, 6, 6, 3); __PYX_ERR(0, 50, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_halo_masses)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcCSHCat", 1, 6, 6, 4); __PYX_ERR(0, 50, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MIN_NUMBER_DM_PTCS)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("calcCSHCat", 1, 6, 6, 5); __PYX_ERR(0, 50, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "calcCSHCat") < 0)) __PYX_ERR(0, 50, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 6) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + } + __pyx_v_nb_shs = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_nb_shs.memview)) __PYX_ERR(0, 50, __pyx_L3_error) + __pyx_v_sh_len = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_sh_len.memview)) __PYX_ERR(0, 50, __pyx_L3_error) + __pyx_v_fof_dm_sizes = __Pyx_PyObject_to_MemoryviewSlice_ds_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_fof_dm_sizes.memview)) __PYX_ERR(0, 50, __pyx_L3_error) + __pyx_v_group_r200 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_group_r200.memview)) __PYX_ERR(0, 50, __pyx_L3_error) + __pyx_v_halo_masses = __Pyx_PyObject_to_MemoryviewSlice_ds_float(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_halo_masses.memview)) __PYX_ERR(0, 50, __pyx_L3_error) + __pyx_v_MIN_NUMBER_DM_PTCS = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_MIN_NUMBER_DM_PTCS == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 50, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("calcCSHCat", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 50, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("gadget_hdf5.gen_catalogues.calcCSHCat", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_11gadget_hdf5_14gen_catalogues_4calcCSHCat(__pyx_self, __pyx_v_nb_shs, __pyx_v_sh_len, __pyx_v_fof_dm_sizes, __pyx_v_group_r200, __pyx_v_halo_masses, __pyx_v_MIN_NUMBER_DM_PTCS); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11gadget_hdf5_14gen_catalogues_4calcCSHCat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_nb_shs, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_sh_len, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_fof_dm_sizes, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_group_r200, CYTHON_UNUSED __Pyx_memviewslice __pyx_v_halo_masses, CYTHON_UNUSED int __pyx_v_MIN_NUMBER_DM_PTCS) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("calcCSHCat", 0); + + /* "gadget_hdf5/gen_catalogues.pyx":70 + * h_r200: R200-radii, h_pass: passed `MIN_NUMBER_DM_PTCS`-threshold or not + * :rtype: int array, float array, int array""" + * return # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "gadget_hdf5/gen_catalogues.pyx":50 + * + * @cython.embedsignature(True) + * def calcCSHCat(int[:] nb_shs, int[:] sh_len, int[:] fof_dm_sizes, float[:] group_r200, float[:] halo_masses, int MIN_NUMBER_DM_PTCS): # <<<<<<<<<<<<<< + * """ Construct central subhalo (CSH) catalogue from FoF/SH info + * + */ + + /* function exit code */ + __pyx_L0:; + __PYX_XDEC_MEMVIEW(&__pyx_v_nb_shs, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_sh_len, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_fof_dm_sizes, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_group_r200, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_halo_masses, 1); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + +/* Python wrapper */ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_shape = 0; + Py_ssize_t __pyx_v_itemsize; + PyObject *__pyx_v_format = 0; + PyObject *__pyx_v_mode = 0; + int __pyx_v_allocate_buffer; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[3] = ((PyObject *)__pyx_n_s_c); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(1, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(1, 122, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 122, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_shape = ((PyObject*)values[0]); + __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 122, __pyx_L3_error) + __pyx_v_format = values[2]; + __pyx_v_mode = values[3]; + if (values[4]) { + __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 123, __pyx_L3_error) + } else { + + /* "View.MemoryView":123 + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, + * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< + * + * cdef int idx + */ + __pyx_v_allocate_buffer = ((int)1); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 122, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(1, 122, __pyx_L1_error) + if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { + PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(1, 122, __pyx_L1_error) + } + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + int __pyx_v_idx; + Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_dim; + PyObject **__pyx_v_p; + char __pyx_v_order; + int __pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + char *__pyx_t_7; + int __pyx_t_8; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + Py_ssize_t __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + __Pyx_INCREF(__pyx_v_format); + + /* "View.MemoryView":129 + * cdef PyObject **p + * + * self.ndim = len(shape) # <<<<<<<<<<<<<< + * self.itemsize = itemsize + * + */ + if (unlikely(__pyx_v_shape == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 129, __pyx_L1_error) + } + __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(1, 129, __pyx_L1_error) + __pyx_v_self->ndim = ((int)__pyx_t_1); + + /* "View.MemoryView":130 + * + * self.ndim = len(shape) + * self.itemsize = itemsize # <<<<<<<<<<<<<< + * + * if not self.ndim: + */ + __pyx_v_self->itemsize = __pyx_v_itemsize; + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 133, __pyx_L1_error) + + /* "View.MemoryView":132 + * self.itemsize = itemsize + * + * if not self.ndim: # <<<<<<<<<<<<<< + * raise ValueError("Empty shape tuple for cython.array") + * + */ + } + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 136, __pyx_L1_error) + + /* "View.MemoryView":135 + * raise ValueError("Empty shape tuple for cython.array") + * + * if itemsize <= 0: # <<<<<<<<<<<<<< + * raise ValueError("itemsize <= 0 for cython.array") + * + */ + } + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + __pyx_t_2 = PyBytes_Check(__pyx_v_format); + __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":139 + * + * if not isinstance(format, bytes): + * format = format.encode('ASCII') # <<<<<<<<<<<<<< + * self._format = format # keep a reference to the byte string + * self.format = self._format + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + if (CYTHON_UNPACK_METHODS && likely(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_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":138 + * raise ValueError("itemsize <= 0 for cython.array") + * + * if not isinstance(format, bytes): # <<<<<<<<<<<<<< + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + */ + } + + /* "View.MemoryView":140 + * if not isinstance(format, bytes): + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< + * self.format = self._format + * + */ + if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(1, 140, __pyx_L1_error) + __pyx_t_3 = __pyx_v_format; + __Pyx_INCREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_v_self->_format); + __Pyx_DECREF(__pyx_v_self->_format); + __pyx_v_self->_format = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":141 + * format = format.encode('ASCII') + * self._format = format # keep a reference to the byte string + * self.format = self._format # <<<<<<<<<<<<<< + * + * + */ + if (unlikely(__pyx_v_self->_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); + __PYX_ERR(1, 141, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(1, 141, __pyx_L1_error) + __pyx_v_self->format = __pyx_t_7; + + /* "View.MemoryView":144 + * + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< + * self._strides = self._shape + self.ndim + * + */ + __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); + + /* "View.MemoryView":145 + * + * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) + * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< + * + * if not self._shape: + */ + __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 148, __pyx_L1_error) + + /* "View.MemoryView":147 + * self._strides = self._shape + self.ndim + * + * if not self._shape: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate shape and strides.") + * + */ + } + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + __pyx_t_8 = 0; + __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; + for (;;) { + if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(1, 151, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 151, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_9; + __pyx_v_idx = __pyx_t_8; + __pyx_t_8 = (__pyx_t_8 + 1); + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + __pyx_t_4 = ((__pyx_v_dim <= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":153 + * for idx, dim in enumerate(shape): + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) # <<<<<<<<<<<<<< + * self._shape[idx] = dim + * + */ + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6); + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 153, __pyx_L1_error) + + /* "View.MemoryView":152 + * + * for idx, dim in enumerate(shape): + * if dim <= 0: # <<<<<<<<<<<<<< + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim + */ + } + + /* "View.MemoryView":154 + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + * self._shape[idx] = dim # <<<<<<<<<<<<<< + * + * cdef char order + */ + (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; + + /* "View.MemoryView":151 + * + * + * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< + * if dim <= 0: + * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 157, __pyx_L1_error) + if (__pyx_t_4) { + + /* "View.MemoryView":158 + * cdef char order + * if mode == 'fortran': + * order = b'F' # <<<<<<<<<<<<<< + * self.mode = u'fortran' + * elif mode == 'c': + */ + __pyx_v_order = 'F'; + + /* "View.MemoryView":159 + * if mode == 'fortran': + * order = b'F' + * self.mode = u'fortran' # <<<<<<<<<<<<<< + * elif mode == 'c': + * order = b'C' + */ + __Pyx_INCREF(__pyx_n_u_fortran); + __Pyx_GIVEREF(__pyx_n_u_fortran); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_fortran; + + /* "View.MemoryView":157 + * + * cdef char order + * if mode == 'fortran': # <<<<<<<<<<<<<< + * order = b'F' + * self.mode = u'fortran' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 160, __pyx_L1_error) + if (likely(__pyx_t_4)) { + + /* "View.MemoryView":161 + * self.mode = u'fortran' + * elif mode == 'c': + * order = b'C' # <<<<<<<<<<<<<< + * self.mode = u'c' + * else: + */ + __pyx_v_order = 'C'; + + /* "View.MemoryView":162 + * elif mode == 'c': + * order = b'C' + * self.mode = u'c' # <<<<<<<<<<<<<< + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + */ + __Pyx_INCREF(__pyx_n_u_c); + __Pyx_GIVEREF(__pyx_n_u_c); + __Pyx_GOTREF(__pyx_v_self->mode); + __Pyx_DECREF(__pyx_v_self->mode); + __pyx_v_self->mode = __pyx_n_u_c; + + /* "View.MemoryView":160 + * order = b'F' + * self.mode = u'fortran' + * elif mode == 'c': # <<<<<<<<<<<<<< + * order = b'C' + * self.mode = u'c' + */ + goto __pyx_L10; + } + + /* "View.MemoryView":164 + * self.mode = u'c' + * else: + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) # <<<<<<<<<<<<<< + * + * self.len = fill_contig_strides_array(self._shape, self._strides, + */ + /*else*/ { + __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 164, __pyx_L1_error) + } + __pyx_L10:; + + /* "View.MemoryView":166 + * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) + * + * self.len = fill_contig_strides_array(self._shape, self._strides, # <<<<<<<<<<<<<< + * itemsize, self.ndim, order) + * + */ + __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); + + /* "View.MemoryView":169 + * itemsize, self.ndim, order) + * + * self.free_data = allocate_buffer # <<<<<<<<<<<<<< + * self.dtype_is_object = format == b'O' + * if allocate_buffer: + */ + __pyx_v_self->free_data = __pyx_v_allocate_buffer; + + /* "View.MemoryView":170 + * + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< + * if allocate_buffer: + * + */ + __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 170, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 170, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_v_self->dtype_is_object = __pyx_t_4; + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_4 = (__pyx_v_allocate_buffer != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":174 + * + * + * self.data = malloc(self.len) # <<<<<<<<<<<<<< + * if not self.data: + * raise MemoryError("unable to allocate array data.") + */ + __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_Raise(__pyx_t_10, 0, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(1, 176, __pyx_L1_error) + + /* "View.MemoryView":175 + * + * self.data = malloc(self.len) + * if not self.data: # <<<<<<<<<<<<<< + * raise MemoryError("unable to allocate array data.") + * + */ + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":179 + * + * if self.dtype_is_object: + * p = self.data # <<<<<<<<<<<<<< + * for i in range(self.len / itemsize): + * p[i] = Py_None + */ + __pyx_v_p = ((PyObject **)__pyx_v_self->data); + + /* "View.MemoryView":180 + * if self.dtype_is_object: + * p = self.data + * for i in range(self.len / itemsize): # <<<<<<<<<<<<<< + * p[i] = Py_None + * Py_INCREF(Py_None) + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 180, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 180, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize); + __pyx_t_9 = __pyx_t_1; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "View.MemoryView":181 + * p = self.data + * for i in range(self.len / itemsize): + * p[i] = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + (__pyx_v_p[__pyx_v_i]) = Py_None; + + /* "View.MemoryView":182 + * for i in range(self.len / itemsize): + * p[i] = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + Py_INCREF(Py_None); + } + + /* "View.MemoryView":178 + * raise MemoryError("unable to allocate array data.") + * + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * p = self.data + * for i in range(self.len / itemsize): + */ + } + + /* "View.MemoryView":171 + * self.free_data = allocate_buffer + * self.dtype_is_object = format == b'O' + * if allocate_buffer: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":122 + * cdef bint dtype_is_object + * + * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< + * mode="c", bint allocate_buffer=True): + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_format); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __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)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + int __pyx_v_bufmode; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + char *__pyx_t_4; + Py_ssize_t __pyx_t_5; + int __pyx_t_6; + Py_ssize_t *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":186 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 # <<<<<<<<<<<<<< + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = -1; + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 187, __pyx_L1_error) + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":188 + * cdef int bufmode = -1 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + */ + __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":187 + * def __getbuffer__(self, Py_buffer *info, int flags): + * cdef int bufmode = -1 + * if self.mode == u"c": # <<<<<<<<<<<<<< + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + */ + goto __pyx_L3; + } + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 189, __pyx_L1_error) + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":190 + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + */ + __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); + + /* "View.MemoryView":189 + * if self.mode == u"c": + * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * elif self.mode == u"fortran": # <<<<<<<<<<<<<< + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + */ + } + __pyx_L3:; + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 192, __pyx_L1_error) + + /* "View.MemoryView":191 + * elif self.mode == u"fortran": + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): # <<<<<<<<<<<<<< + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + */ + } + + /* "View.MemoryView":193 + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data # <<<<<<<<<<<<<< + * info.len = self.len + * info.ndim = self.ndim + */ + __pyx_t_4 = __pyx_v_self->data; + __pyx_v_info->buf = __pyx_t_4; + + /* "View.MemoryView":194 + * raise ValueError("Can only create a buffer that is contiguous in memory.") + * info.buf = self.data + * info.len = self.len # <<<<<<<<<<<<<< + * info.ndim = self.ndim + * info.shape = self._shape + */ + __pyx_t_5 = __pyx_v_self->len; + __pyx_v_info->len = __pyx_t_5; + + /* "View.MemoryView":195 + * info.buf = self.data + * info.len = self.len + * info.ndim = self.ndim # <<<<<<<<<<<<<< + * info.shape = self._shape + * info.strides = self._strides + */ + __pyx_t_6 = __pyx_v_self->ndim; + __pyx_v_info->ndim = __pyx_t_6; + + /* "View.MemoryView":196 + * info.len = self.len + * info.ndim = self.ndim + * info.shape = self._shape # <<<<<<<<<<<<<< + * info.strides = self._strides + * info.suboffsets = NULL + */ + __pyx_t_7 = __pyx_v_self->_shape; + __pyx_v_info->shape = __pyx_t_7; + + /* "View.MemoryView":197 + * info.ndim = self.ndim + * info.shape = self._shape + * info.strides = self._strides # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = self.itemsize + */ + __pyx_t_7 = __pyx_v_self->_strides; + __pyx_v_info->strides = __pyx_t_7; + + /* "View.MemoryView":198 + * info.shape = self._shape + * info.strides = self._strides + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = self.itemsize + * info.readonly = 0 + */ + __pyx_v_info->suboffsets = NULL; + + /* "View.MemoryView":199 + * info.strides = self._strides + * info.suboffsets = NULL + * info.itemsize = self.itemsize # <<<<<<<<<<<<<< + * info.readonly = 0 + * + */ + __pyx_t_5 = __pyx_v_self->itemsize; + __pyx_v_info->itemsize = __pyx_t_5; + + /* "View.MemoryView":200 + * info.suboffsets = NULL + * info.itemsize = self.itemsize + * info.readonly = 0 # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + __pyx_v_info->readonly = 0; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":203 + * + * if flags & PyBUF_FORMAT: + * info.format = self.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_4 = __pyx_v_self->format; + __pyx_v_info->format = __pyx_t_4; + + /* "View.MemoryView":202 + * info.readonly = 0 + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.format + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":205 + * info.format = self.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.obj = self + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L5:; + + /* "View.MemoryView":207 + * info.format = NULL + * + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":185 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * cdef int bufmode = -1 + * if self.mode == u"c": + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + +/* Python wrapper */ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":213 + * def __dealloc__(array self): + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) # <<<<<<<<<<<<<< + * elif self.free_data: + * if self.dtype_is_object: + */ + __pyx_v_self->callback_free_data(__pyx_v_self->data); + + /* "View.MemoryView":212 + * + * def __dealloc__(array self): + * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< + * self.callback_free_data(self.data) + * elif self.free_data: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + __pyx_t_1 = (__pyx_v_self->free_data != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":216 + * elif self.free_data: + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, # <<<<<<<<<<<<<< + * self._strides, self.ndim, False) + * free(self.data) + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); + + /* "View.MemoryView":215 + * self.callback_free_data(self.data) + * elif self.free_data: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + */ + } + + /* "View.MemoryView":218 + * refcount_objects_in_slice(self.data, self._shape, + * self._strides, self.ndim, False) + * free(self.data) # <<<<<<<<<<<<<< + * PyObject_Free(self._shape) + * + */ + free(__pyx_v_self->data); + + /* "View.MemoryView":214 + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + * elif self.free_data: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * refcount_objects_in_slice(self.data, self._shape, + */ + } + __pyx_L3:; + + /* "View.MemoryView":219 + * self._strides, self.ndim, False) + * free(self.data) + * PyObject_Free(self._shape) # <<<<<<<<<<<<<< + * + * @property + */ + PyObject_Free(__pyx_v_self->_shape); + + /* "View.MemoryView":211 + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") + * + * def __dealloc__(array self): # <<<<<<<<<<<<<< + * if self.callback_free_data != NULL: + * self.callback_free_data(self.data) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__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("__get__", 0); + + /* "View.MemoryView":223 + * @property + * def memview(self): + * return self.get_memview() # <<<<<<<<<<<<<< + * + * @cname('get_memview') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":222 + * + * @property + * def memview(self): # <<<<<<<<<<<<<< + * return self.get_memview() + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + +static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) { + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_memview", 0); + + /* "View.MemoryView":227 + * @cname('get_memview') + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< + * return memoryview(self, flags, self.dtype_is_object) + * + */ + __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); + + /* "View.MemoryView":228 + * cdef get_memview(self): + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 228, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":226 + * + * @cname('get_memview') + * cdef get_memview(self): # <<<<<<<<<<<<<< + * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE + * return memoryview(self, flags, self.dtype_is_object) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":231 + * + * def __len__(self): + * return self._shape[0] # <<<<<<<<<<<<<< + * + * def __getattr__(self, attr): + */ + __pyx_r = (__pyx_v_self->_shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":230 + * return memoryview(self, flags, self.dtype_is_object) + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self._shape[0] + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ +static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getattr__", 0); + + /* "View.MemoryView":234 + * + * def __getattr__(self, attr): + * return getattr(self.memview, attr) # <<<<<<<<<<<<<< + * + * def __getitem__(self, item): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":233 + * return self._shape[0] + * + * def __getattr__(self, attr): # <<<<<<<<<<<<<< + * return getattr(self.memview, attr) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + +/* Python wrapper */ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ +static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":237 + * + * def __getitem__(self, item): + * return self.memview[item] # <<<<<<<<<<<<<< + * + * def __setitem__(self, item, value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":236 + * return getattr(self.memview, attr) + * + * def __getitem__(self, item): # <<<<<<<<<<<<<< + * return self.memview[item] + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + +/* Python wrapper */ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + + /* "View.MemoryView":240 + * + * def __setitem__(self, item, value): + * self.memview[item] = value # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(1, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "View.MemoryView":239 + * return self.memview[item] + * + * def __setitem__(self, item, value): # <<<<<<<<<<<<<< + * self.memview[item] = value + * + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + +static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) { + struct __pyx_array_obj *__pyx_v_result = 0; + struct __pyx_array_obj *__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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("array_cwrapper", 0); + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":249 + * + * if buf == NULL: + * result = array(shape, itemsize, format, mode.decode('ASCII')) # <<<<<<<<<<<<<< + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4); + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":248 + * cdef array result + * + * if buf == NULL: # <<<<<<<<<<<<<< + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + /*else*/ { + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 251, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_shape); + __Pyx_GIVEREF(__pyx_v_shape); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":252 + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) # <<<<<<<<<<<<<< + * result.data = buf + * + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(1, 252, __pyx_L1_error) + + /* "View.MemoryView":251 + * result = array(shape, itemsize, format, mode.decode('ASCII')) + * else: + * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< + * allocate_buffer=False) + * result.data = buf + */ + __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 251, __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_v_result = ((struct __pyx_array_obj *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "View.MemoryView":253 + * result = array(shape, itemsize, format, mode.decode('ASCII'), + * allocate_buffer=False) + * result.data = buf # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->data = __pyx_v_buf; + } + __pyx_L3:; + + /* "View.MemoryView":255 + * result.data = buf + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":244 + * + * @cname("__pyx_array_new") + * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< + * char *mode, char *buf): + * cdef array result + */ + + /* 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("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + +/* Python wrapper */ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_name = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0}; + PyObject* values[1] = {0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(1, 281, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + } + __pyx_v_name = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 281, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 0); + + /* "View.MemoryView":282 + * cdef object name + * def __init__(self, name): + * self.name = name # <<<<<<<<<<<<<< + * def __repr__(self): + * return self.name + */ + __Pyx_INCREF(__pyx_v_name); + __Pyx_GIVEREF(__pyx_v_name); + __Pyx_GOTREF(__pyx_v_self->name); + __Pyx_DECREF(__pyx_v_self->name); + __pyx_v_self->name = __pyx_v_name; + + /* "View.MemoryView":281 + * cdef class Enum(object): + * cdef object name + * def __init__(self, name): # <<<<<<<<<<<<<< + * self.name = name + * def __repr__(self): + */ + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + +/* Python wrapper */ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":284 + * self.name = name + * def __repr__(self): + * return self.name # <<<<<<<<<<<<<< + * + * cdef generic = Enum("") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->name); + __pyx_r = __pyx_v_self->name; + goto __pyx_L0; + + /* "View.MemoryView":283 + * def __init__(self, name): + * self.name = name + * def __repr__(self): # <<<<<<<<<<<<<< + * return self.name + * + */ + + /* function exit code */ + __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___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__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; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.name,) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_self->name); + __Pyx_GIVEREF(__pyx_v_self->name); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); + __pyx_v_state = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":7 + * state = (self.name,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_2 = (__pyx_v__dict != Py_None); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); + __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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.name is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.name,) + * _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.name is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_self->name != Py_None); + __pyx_v_use_setstate = __pyx_t_3; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + __pyx_t_3 = (__pyx_v_use_setstate != 0); + if (__pyx_t_3) { + + /* "(tree fragment)":13 + * use_setstate = self.name is not None + * if use_setstate: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.name is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state + * else: + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_184977713); + __Pyx_GIVEREF(__pyx_int_184977713); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __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_5); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __pyx_t_5 = 0; + __pyx_t_1 = 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_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.Enum.__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_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__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__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_unpickle_Enum__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_Enum, (type(self), 0xb068931, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__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("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + +static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) { + Py_intptr_t __pyx_v_aligned_p; + size_t __pyx_v_offset; + void *__pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":300 + * cdef void *align_pointer(void *memory, size_t alignment) nogil: + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory # <<<<<<<<<<<<<< + * cdef size_t offset + * + */ + __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory); + + /* "View.MemoryView":304 + * + * with cython.cdivision(True): + * offset = aligned_p % alignment # <<<<<<<<<<<<<< + * + * if offset > 0: + */ + __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + __pyx_t_1 = ((__pyx_v_offset > 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":307 + * + * if offset > 0: + * aligned_p += alignment - offset # <<<<<<<<<<<<<< + * + * return aligned_p + */ + __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset)); + + /* "View.MemoryView":306 + * offset = aligned_p % alignment + * + * if offset > 0: # <<<<<<<<<<<<<< + * aligned_p += alignment - offset + * + */ + } + + /* "View.MemoryView":309 + * aligned_p += alignment - offset + * + * return aligned_p # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((void *)__pyx_v_aligned_p); + goto __pyx_L0; + + /* "View.MemoryView":298 + * + * @cname('__pyx_align_pointer') + * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< + * "Align pointer memory on a given boundary" + * cdef Py_intptr_t aligned_p = memory + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + +/* Python wrapper */ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_obj = 0; + int __pyx_v_flags; + int __pyx_v_dtype_is_object; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(1, 345, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 345, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_obj = values[0]; + __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error) + if (values[2]) { + __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 345, __pyx_L3_error) + } else { + __pyx_v_dtype_is_object = ((int)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 345, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__cinit__", 0); + + /* "View.MemoryView":346 + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj # <<<<<<<<<<<<<< + * self.flags = flags + * if type(self) is memoryview or obj is not None: + */ + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + __Pyx_GOTREF(__pyx_v_self->obj); + __Pyx_DECREF(__pyx_v_self->obj); + __pyx_v_self->obj = __pyx_v_obj; + + /* "View.MemoryView":347 + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): + * self.obj = obj + * self.flags = flags # <<<<<<<<<<<<<< + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + */ + __pyx_v_self->flags = __pyx_v_flags; + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type)); + __pyx_t_3 = (__pyx_t_2 != 0); + if (!__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_obj != Py_None); + __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { + + /* "View.MemoryView":349 + * self.flags = flags + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + */ + __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 349, __pyx_L1_error) + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":351 + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; + + /* "View.MemoryView":352 + * if self.view.obj == NULL: + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * global __pyx_memoryview_thread_locks_used + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":350 + * if type(self) is memoryview or obj is not None: + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &self.view).obj = Py_None + * Py_INCREF(Py_None) + */ + } + + /* "View.MemoryView":348 + * self.obj = obj + * self.flags = flags + * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< + * __Pyx_GetBuffer(obj, &self.view, flags) + * if self.view.obj == NULL: + */ + } + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":356 + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + */ + __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + + /* "View.MemoryView":357 + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<< + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1); + + /* "View.MemoryView":355 + * + * global __pyx_memoryview_thread_locks_used + * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":359 + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< + * if self.lock is NULL: + * raise MemoryError + */ + __pyx_v_self->lock = PyThread_allocate_lock(); + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":361 + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + PyErr_NoMemory(); __PYX_ERR(1, 361, __pyx_L1_error) + + /* "View.MemoryView":360 + * if self.lock is NULL: + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * + */ + } + + /* "View.MemoryView":358 + * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] + * __pyx_memoryview_thread_locks_used += 1 + * if self.lock is NULL: # <<<<<<<<<<<<<< + * self.lock = PyThread_allocate_lock() + * if self.lock is NULL: + */ + } + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":364 + * + * if flags & PyBUF_FORMAT: + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<< + * else: + * self.dtype_is_object = dtype_is_object + */ + __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_self->dtype_is_object = __pyx_t_1; + + /* "View.MemoryView":363 + * raise MemoryError + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + */ + goto __pyx_L10; + } + + /* "View.MemoryView":366 + * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') + * else: + * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + */ + /*else*/ { + __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; + } + __pyx_L10:; + + /* "View.MemoryView":368 + * self.dtype_is_object = dtype_is_object + * + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( # <<<<<<<<<<<<<< + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL + */ + __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int)))); + + /* "View.MemoryView":370 + * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( + * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) + * self.typeinfo = NULL # <<<<<<<<<<<<<< + * + * def __dealloc__(memoryview self): + */ + __pyx_v_self->typeinfo = NULL; + + /* "View.MemoryView":345 + * cdef __Pyx_TypeInfo *typeinfo + * + * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< + * self.obj = obj + * self.flags = flags + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + +/* Python wrapper */ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { + int __pyx_v_i; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyThread_type_lock __pyx_t_6; + PyThread_type_lock __pyx_t_7; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + __pyx_t_1 = (__pyx_v_self->obj != Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":374 + * def __dealloc__(memoryview self): + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + */ + __Pyx_ReleaseBuffer((&__pyx_v_self->view)); + + /* "View.MemoryView":373 + * + * def __dealloc__(memoryview self): + * if self.obj is not None: # <<<<<<<<<<<<<< + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + __pyx_t_2 = ((((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":377 + * elif (<__pyx_buffer *> &self.view).obj == Py_None: + * + * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<< + * Py_DECREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL; + + /* "View.MemoryView":378 + * + * (<__pyx_buffer *> &self.view).obj = NULL + * Py_DECREF(Py_None) # <<<<<<<<<<<<<< + * + * cdef int i + */ + Py_DECREF(Py_None); + + /* "View.MemoryView":375 + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<< + * + * (<__pyx_buffer *> &self.view).obj = NULL + */ + } + __pyx_L3:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":383 + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<< + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + */ + __pyx_t_3 = __pyx_memoryview_thread_locks_used; + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":385 + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<< + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + */ + __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1); + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":388 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<< + * break + * else: + */ + __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); + __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]); + + /* "View.MemoryView":387 + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break + */ + (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6; + (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7; + + /* "View.MemoryView":386 + * if __pyx_memoryview_thread_locks[i] is self.lock: + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + */ + } + + /* "View.MemoryView":389 + * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( + * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) + * break # <<<<<<<<<<<<<< + * else: + * PyThread_free_lock(self.lock) + */ + goto __pyx_L6_break; + + /* "View.MemoryView":384 + * if self.lock != NULL: + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< + * __pyx_memoryview_thread_locks_used -= 1 + * if i != __pyx_memoryview_thread_locks_used: + */ + } + } + /*else*/ { + + /* "View.MemoryView":391 + * break + * else: + * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + */ + PyThread_free_lock(__pyx_v_self->lock); + } + __pyx_L6_break:; + + /* "View.MemoryView":382 + * cdef int i + * global __pyx_memoryview_thread_locks_used + * if self.lock != NULL: # <<<<<<<<<<<<<< + * for i in range(__pyx_memoryview_thread_locks_used): + * if __pyx_memoryview_thread_locks[i] is self.lock: + */ + } + + /* "View.MemoryView":372 + * self.typeinfo = NULL + * + * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< + * if self.obj is not None: + * __Pyx_ReleaseBuffer(&self.view) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + +static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + Py_ssize_t __pyx_v_dim; + char *__pyx_v_itemp; + PyObject *__pyx_v_idx = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + PyObject *(*__pyx_t_4)(PyObject *); + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + char *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_item_pointer", 0); + + /* "View.MemoryView":395 + * cdef char *get_item_pointer(memoryview self, object index) except NULL: + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< + * + * for dim, idx in enumerate(index): + */ + __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + __pyx_t_1 = 0; + if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) { + __pyx_t_2 = __pyx_v_index; __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_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 397, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_4)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) 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(1, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) 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(1, 397, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 397, __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(1, 397, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_v_dim = __pyx_t_1; + __pyx_t_1 = (__pyx_t_1 + 1); + + /* "View.MemoryView":398 + * + * for dim, idx in enumerate(index): + * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< + * + * return itemp + */ + __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 398, __pyx_L1_error) + __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(1, 398, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_7; + + /* "View.MemoryView":397 + * cdef char *itemp = self.view.buf + * + * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + */ + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":400 + * itemp = pybuffer_index(&self.view, itemp, idx, dim) + * + * return itemp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_itemp; + goto __pyx_L0; + + /* "View.MemoryView":393 + * PyThread_free_lock(self.lock) + * + * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< + * cdef Py_ssize_t dim + * cdef char *itemp = self.view.buf + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ +static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_indices = NULL; + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + char *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getitem__", 0); + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":405 + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: + * return self # <<<<<<<<<<<<<< + * + * have_slices, indices = _unellipsify(index, self.view.ndim) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __pyx_r = ((PyObject *)__pyx_v_self); + goto __pyx_L0; + + /* "View.MemoryView":404 + * + * def __getitem__(memoryview self, object index): + * if index is Ellipsis: # <<<<<<<<<<<<<< + * return self + * + */ + } + + /* "View.MemoryView":407 + * return self + * + * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * cdef char *itemp + */ + __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (likely(__pyx_t_3 != Py_None)) { + PyObject* sequence = __pyx_t_3; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 407, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 407, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_v_indices = __pyx_t_5; + __pyx_t_5 = 0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 410, __pyx_L1_error) + if (__pyx_t_2) { + + /* "View.MemoryView":411 + * cdef char *itemp + * if have_slices: + * return memview_slice(self, indices) # <<<<<<<<<<<<<< + * else: + * itemp = self.get_item_pointer(indices) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":410 + * + * cdef char *itemp + * if have_slices: # <<<<<<<<<<<<<< + * return memview_slice(self, indices) + * else: + */ + } + + /* "View.MemoryView":413 + * return memview_slice(self, indices) + * else: + * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< + * return self.convert_item_to_object(itemp) + * + */ + /*else*/ { + __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(1, 413, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_6; + + /* "View.MemoryView":414 + * else: + * itemp = self.get_item_pointer(indices) + * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< + * + * def __setitem__(memoryview self, object index, object value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":403 + * + * + * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< + * if index is Ellipsis: + * return self + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_indices); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + +/* Python wrapper */ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + PyObject *__pyx_v_have_slices = NULL; + PyObject *__pyx_v_obj = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setitem__", 0); + __Pyx_INCREF(__pyx_v_index); + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + __pyx_t_1 = (__pyx_v_self->view.readonly != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 418, __pyx_L1_error) + + /* "View.MemoryView":417 + * + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: # <<<<<<<<<<<<<< + * raise TypeError("Cannot assign to read-only memoryview") + * + */ + } + + /* "View.MemoryView":420 + * raise TypeError("Cannot assign to read-only memoryview") + * + * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< + * + * if have_slices: + */ + __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (likely(__pyx_t_2 != Py_None)) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(1, 420, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 420, __pyx_L1_error) + } + __pyx_v_have_slices = __pyx_t_3; + __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 422, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":423 + * + * if have_slices: + * obj = self.is_slice(value) # <<<<<<<<<<<<<< + * if obj: + * self.setitem_slice_assignment(self[index], obj) + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_obj = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 424, __pyx_L1_error) + if (__pyx_t_1) { + + /* "View.MemoryView":425 + * obj = self.is_slice(value) + * if obj: + * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< + * else: + * self.setitem_slice_assign_scalar(self[index], value) + */ + __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "View.MemoryView":424 + * if have_slices: + * obj = self.is_slice(value) + * if obj: # <<<<<<<<<<<<<< + * self.setitem_slice_assignment(self[index], obj) + * else: + */ + goto __pyx_L5; + } + + /* "View.MemoryView":427 + * self.setitem_slice_assignment(self[index], obj) + * else: + * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< + * else: + * self.setitem_indexed(index, value) + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(1, 427, __pyx_L1_error) + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L5:; + + /* "View.MemoryView":422 + * have_slices, index = _unellipsify(index, self.view.ndim) + * + * if have_slices: # <<<<<<<<<<<<<< + * obj = self.is_slice(value) + * if obj: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":429 + * self.setitem_slice_assign_scalar(self[index], value) + * else: + * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< + * + * cdef is_slice(self, obj): + */ + /*else*/ { + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_L4:; + + /* "View.MemoryView":416 + * return self.convert_item_to_object(itemp) + * + * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_have_slices); + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + +static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_slice", 0); + __Pyx_INCREF(__pyx_v_obj); + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + /*try:*/ { + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":435 + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) # <<<<<<<<<<<<<< + * except TypeError: + * return None + */ + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 435, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "View.MemoryView":434 + * if not isinstance(obj, memoryview): + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< + * self.dtype_is_object) + * except TypeError: + */ + __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_obj); + __Pyx_GIVEREF(__pyx_v_obj); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 434, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); + __pyx_t_7 = 0; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L9_try_end; + __pyx_L4_error:; + __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; + + /* "View.MemoryView":436 + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + * except TypeError: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); + if (__pyx_t_9) { + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(1, 436, __pyx_L6_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GOTREF(__pyx_t_6); + + /* "View.MemoryView":437 + * self.dtype_is_object) + * except TypeError: + * return None # <<<<<<<<<<<<<< + * + * return obj + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L7_except_return; + } + goto __pyx_L6_except_error; + __pyx_L6_except_error:; + + /* "View.MemoryView":433 + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): + * try: # <<<<<<<<<<<<<< + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + * self.dtype_is_object) + */ + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L1_error; + __pyx_L7_except_return:; + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + goto __pyx_L0; + __pyx_L9_try_end:; + } + + /* "View.MemoryView":432 + * + * cdef is_slice(self, obj): + * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< + * try: + * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, + */ + } + + /* "View.MemoryView":439 + * return None + * + * return obj # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assignment(self, dst, src): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_obj); + __pyx_r = __pyx_v_obj; + goto __pyx_L0; + + /* "View.MemoryView":431 + * self.setitem_indexed(index, value) + * + * cdef is_slice(self, obj): # <<<<<<<<<<<<<< + * if not isinstance(obj, memoryview): + * try: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_obj); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + +static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { + __Pyx_memviewslice __pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_src_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + __Pyx_memviewslice *__pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 445, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 445, __pyx_L1_error) + + /* "View.MemoryView":446 + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], # <<<<<<<<<<<<<< + * src.ndim, dst.ndim, self.dtype_is_object) + * + */ + if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 446, __pyx_L1_error) + __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 446, __pyx_L1_error) + + /* "View.MemoryView":447 + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 447, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":445 + * cdef __Pyx_memviewslice src_slice + * + * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< + * get_slice_from_memview(dst, &dst_slice)[0], + * src.ndim, dst.ndim, self.dtype_is_object) + */ + __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error) + + /* "View.MemoryView":441 + * return obj + * + * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice dst_slice + * cdef __Pyx_memviewslice src_slice + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + +static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { + int __pyx_v_array[0x80]; + void *__pyx_v_tmp; + void *__pyx_v_item; + __Pyx_memviewslice *__pyx_v_dst_slice; + __Pyx_memviewslice __pyx_v_tmp_slice; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + char const *__pyx_t_6; + PyObject *__pyx_t_7 = NULL; + 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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); + + /* "View.MemoryView":451 + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): + * cdef int array[128] + * cdef void *tmp = NULL # <<<<<<<<<<<<<< + * cdef void *item + * + */ + __pyx_v_tmp = NULL; + + /* "View.MemoryView":456 + * cdef __Pyx_memviewslice *dst_slice + * cdef __Pyx_memviewslice tmp_slice + * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< + * + * if self.view.itemsize > sizeof(array): + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 456, __pyx_L1_error) + __pyx_v_dst_slice = __pyx_t_1; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":459 + * + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< + * if tmp == NULL: + * raise MemoryError + */ + __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":461 + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + * raise MemoryError # <<<<<<<<<<<<<< + * item = tmp + * else: + */ + PyErr_NoMemory(); __PYX_ERR(1, 461, __pyx_L1_error) + + /* "View.MemoryView":460 + * if self.view.itemsize > sizeof(array): + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: # <<<<<<<<<<<<<< + * raise MemoryError + * item = tmp + */ + } + + /* "View.MemoryView":462 + * if tmp == NULL: + * raise MemoryError + * item = tmp # <<<<<<<<<<<<<< + * else: + * item = array + */ + __pyx_v_item = __pyx_v_tmp; + + /* "View.MemoryView":458 + * dst_slice = get_slice_from_memview(dst, &tmp_slice) + * + * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< + * tmp = PyMem_Malloc(self.view.itemsize) + * if tmp == NULL: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":464 + * item = tmp + * else: + * item = array # <<<<<<<<<<<<<< + * + * try: + */ + /*else*/ { + __pyx_v_item = ((void *)__pyx_v_array); + } + __pyx_L3:; + + /* "View.MemoryView":466 + * item = array + * + * try: # <<<<<<<<<<<<<< + * if self.dtype_is_object: + * ( item)[0] = value + */ + /*try:*/ { + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":468 + * try: + * if self.dtype_is_object: + * ( item)[0] = value # <<<<<<<<<<<<<< + * else: + * self.assign_item_from_object( item, value) + */ + (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); + + /* "View.MemoryView":467 + * + * try: + * if self.dtype_is_object: # <<<<<<<<<<<<<< + * ( item)[0] = value + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":470 + * ( item)[0] = value + * else: + * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 470, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L8:; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":475 + * + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + * item, self.dtype_is_object) + */ + __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 475, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":474 + * + * + * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, + */ + } + + /* "View.MemoryView":476 + * if self.view.suboffsets != NULL: + * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) + * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< + * item, self.dtype_is_object) + * finally: + */ + __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); + } + + /* "View.MemoryView":479 + * item, self.dtype_is_object) + * finally: + * PyMem_Free(tmp) # <<<<<<<<<<<<<< + * + * cdef setitem_indexed(self, index, value): + */ + /*finally:*/ { + /*normal exit:*/{ + PyMem_Free(__pyx_v_tmp); + goto __pyx_L7; + } + __pyx_L6_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __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_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename; + { + PyMem_Free(__pyx_v_tmp); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + } + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; + __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6; + goto __pyx_L1_error; + } + __pyx_L7:; + } + + /* "View.MemoryView":449 + * src.ndim, dst.ndim, self.dtype_is_object) + * + * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< + * cdef int array[128] + * cdef void *tmp = NULL + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + +static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { + char *__pyx_v_itemp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("setitem_indexed", 0); + + /* "View.MemoryView":482 + * + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< + * self.assign_item_from_object(itemp, value) + * + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(1, 482, __pyx_L1_error) + __pyx_v_itemp = __pyx_t_1; + + /* "View.MemoryView":483 + * cdef setitem_indexed(self, index, value): + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":481 + * PyMem_Free(tmp) + * + * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< + * cdef char *itemp = self.get_item_pointer(index) + * self.assign_item_from_object(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_v_struct = NULL; + PyObject *__pyx_v_bytesitem = 0; + PyObject *__pyx_v_result = NULL; + 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; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + size_t __pyx_t_10; + int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":488 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef bytes bytesitem + * + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":491 + * cdef bytes bytesitem + * + * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< + * try: + * result = struct.unpack(self.view.format, bytesitem) + */ + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "View.MemoryView":493 + * bytesitem = itemp[:self.view.itemsize] + * try: + * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< + * except struct.error: + * raise ValueError("Unable to convert item to object") + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + if (CYTHON_UNPACK_METHODS && 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; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else + #endif + { + __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_9); + if (__pyx_t_7) { + __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; + } + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6); + __Pyx_INCREF(__pyx_v_bytesitem); + __Pyx_GIVEREF(__pyx_v_bytesitem); + PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem); + __pyx_t_6 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + } + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + /*else:*/ { + __pyx_t_10 = strlen(__pyx_v_self->view.format); + __pyx_t_11 = ((__pyx_t_10 == 1) != 0); + if (__pyx_t_11) { + + /* "View.MemoryView":498 + * else: + * if len(self.view.format) == 1: + * return result[0] # <<<<<<<<<<<<<< + * return result + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 498, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L6_except_return; + + /* "View.MemoryView":497 + * raise ValueError("Unable to convert item to object") + * else: + * if len(self.view.format) == 1: # <<<<<<<<<<<<<< + * return result[0] + * return result + */ + } + + /* "View.MemoryView":499 + * if len(self.view.format) == 1: + * return result[0] + * return result # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L6_except_return; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "View.MemoryView":494 + * try: + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: # <<<<<<<<<<<<<< + * raise ValueError("Unable to convert item to object") + * else: + */ + __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9); + __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0; + if (__pyx_t_8) { + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 494, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_1); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 495, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __PYX_ERR(1, 495, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "View.MemoryView":492 + * + * bytesitem = itemp[:self.view.itemsize] + * try: # <<<<<<<<<<<<<< + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + */ + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "View.MemoryView":485 + * self.assign_item_from_object(itemp, value) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesitem); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + +static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_v_struct = NULL; + char __pyx_v_c; + PyObject *__pyx_v_bytesvalue = 0; + Py_ssize_t __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + char *__pyx_t_11; + char *__pyx_t_12; + char *__pyx_t_13; + char *__pyx_t_14; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":504 + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + * import struct # <<<<<<<<<<<<<< + * cdef char c + * cdef bytes bytesvalue + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_struct = __pyx_t_1; + __pyx_t_1 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + __pyx_t_2 = PyTuple_Check(__pyx_v_value); + __pyx_t_3 = (__pyx_t_2 != 0); + if (__pyx_t_3) { + + /* "View.MemoryView":510 + * + * if isinstance(value, tuple): + * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< + * else: + * bytesvalue = struct.pack(self.view.format, value) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 510, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "View.MemoryView":509 + * cdef Py_ssize_t i + * + * if isinstance(value, tuple): # <<<<<<<<<<<<<< + * bytesvalue = struct.pack(self.view.format, *value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":512 + * bytesvalue = struct.pack(self.view.format, *value) + * else: + * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< + * + * for i, c in enumerate(bytesvalue): + */ + /*else*/ { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + { + __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (__pyx_t_5) { + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL; + } + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1); + __Pyx_INCREF(__pyx_v_value); + __Pyx_GIVEREF(__pyx_v_value); + PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value); + __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 512, __pyx_L1_error) + __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = 0; + if (unlikely(__pyx_v_bytesvalue == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); + __PYX_ERR(1, 514, __pyx_L1_error) + } + __Pyx_INCREF(__pyx_v_bytesvalue); + __pyx_t_10 = __pyx_v_bytesvalue; + __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10); + __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10)); + for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) { + __pyx_t_11 = __pyx_t_14; + __pyx_v_c = (__pyx_t_11[0]); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + __pyx_v_i = __pyx_t_9; + + /* "View.MemoryView":514 + * bytesvalue = struct.pack(self.view.format, value) + * + * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< + * itemp[i] = c + * + */ + __pyx_t_9 = (__pyx_t_9 + 1); + + /* "View.MemoryView":515 + * + * for i, c in enumerate(bytesvalue): + * itemp[i] = c # <<<<<<<<<<<<<< + * + * @cname('getbuffer') + */ + (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; + } + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "View.MemoryView":501 + * return result + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * """Only used if instantiated manually by the user, or if Cython doesn't + * know how to convert the type""" + */ + + /* 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_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_struct); + __Pyx_XDECREF(__pyx_v_bytesvalue); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + char *__pyx_t_5; + void *__pyx_t_6; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + if (__pyx_v_info == NULL) { + PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); + return -1; + } + __Pyx_RefNannySetupContext("__getbuffer__", 0); + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_self->view.readonly != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 520, __pyx_L1_error) + + /* "View.MemoryView":519 + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + */ + } + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":523 + * + * if flags & PyBUF_ND: + * info.shape = self.view.shape # <<<<<<<<<<<<<< + * else: + * info.shape = NULL + */ + __pyx_t_4 = __pyx_v_self->view.shape; + __pyx_v_info->shape = __pyx_t_4; + + /* "View.MemoryView":522 + * raise ValueError("Cannot create writable memory view from read-only memoryview") + * + * if flags & PyBUF_ND: # <<<<<<<<<<<<<< + * info.shape = self.view.shape + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":525 + * info.shape = self.view.shape + * else: + * info.shape = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_STRIDES: + */ + /*else*/ { + __pyx_v_info->shape = NULL; + } + __pyx_L6:; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":528 + * + * if flags & PyBUF_STRIDES: + * info.strides = self.view.strides # <<<<<<<<<<<<<< + * else: + * info.strides = NULL + */ + __pyx_t_4 = __pyx_v_self->view.strides; + __pyx_v_info->strides = __pyx_t_4; + + /* "View.MemoryView":527 + * info.shape = NULL + * + * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< + * info.strides = self.view.strides + * else: + */ + goto __pyx_L7; + } + + /* "View.MemoryView":530 + * info.strides = self.view.strides + * else: + * info.strides = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_INDIRECT: + */ + /*else*/ { + __pyx_v_info->strides = NULL; + } + __pyx_L7:; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":533 + * + * if flags & PyBUF_INDIRECT: + * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< + * else: + * info.suboffsets = NULL + */ + __pyx_t_4 = __pyx_v_self->view.suboffsets; + __pyx_v_info->suboffsets = __pyx_t_4; + + /* "View.MemoryView":532 + * info.strides = NULL + * + * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< + * info.suboffsets = self.view.suboffsets + * else: + */ + goto __pyx_L8; + } + + /* "View.MemoryView":535 + * info.suboffsets = self.view.suboffsets + * else: + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * + * if flags & PyBUF_FORMAT: + */ + /*else*/ { + __pyx_v_info->suboffsets = NULL; + } + __pyx_L8:; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":538 + * + * if flags & PyBUF_FORMAT: + * info.format = self.view.format # <<<<<<<<<<<<<< + * else: + * info.format = NULL + */ + __pyx_t_5 = __pyx_v_self->view.format; + __pyx_v_info->format = __pyx_t_5; + + /* "View.MemoryView":537 + * info.suboffsets = NULL + * + * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< + * info.format = self.view.format + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":540 + * info.format = self.view.format + * else: + * info.format = NULL # <<<<<<<<<<<<<< + * + * info.buf = self.view.buf + */ + /*else*/ { + __pyx_v_info->format = NULL; + } + __pyx_L9:; + + /* "View.MemoryView":542 + * info.format = NULL + * + * info.buf = self.view.buf # <<<<<<<<<<<<<< + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + */ + __pyx_t_6 = __pyx_v_self->view.buf; + __pyx_v_info->buf = __pyx_t_6; + + /* "View.MemoryView":543 + * + * info.buf = self.view.buf + * info.ndim = self.view.ndim # <<<<<<<<<<<<<< + * info.itemsize = self.view.itemsize + * info.len = self.view.len + */ + __pyx_t_7 = __pyx_v_self->view.ndim; + __pyx_v_info->ndim = __pyx_t_7; + + /* "View.MemoryView":544 + * info.buf = self.view.buf + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< + * info.len = self.view.len + * info.readonly = self.view.readonly + */ + __pyx_t_8 = __pyx_v_self->view.itemsize; + __pyx_v_info->itemsize = __pyx_t_8; + + /* "View.MemoryView":545 + * info.ndim = self.view.ndim + * info.itemsize = self.view.itemsize + * info.len = self.view.len # <<<<<<<<<<<<<< + * info.readonly = self.view.readonly + * info.obj = self + */ + __pyx_t_8 = __pyx_v_self->view.len; + __pyx_v_info->len = __pyx_t_8; + + /* "View.MemoryView":546 + * info.itemsize = self.view.itemsize + * info.len = self.view.len + * info.readonly = self.view.readonly # <<<<<<<<<<<<<< + * info.obj = self + * + */ + __pyx_t_1 = __pyx_v_self->view.readonly; + __pyx_v_info->readonly = __pyx_t_1; + + /* "View.MemoryView":547 + * info.len = self.view.len + * info.readonly = self.view.readonly + * info.obj = self # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + + /* "View.MemoryView":518 + * + * @cname('getbuffer') + * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; + } + __pyx_L2:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":554 + * @property + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< + * transpose_memslice(&result.from_slice) + * return result + */ + __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(1, 554, __pyx_L1_error) + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":555 + * def T(self): + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 555, __pyx_L1_error) + + /* "View.MemoryView":556 + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + * return result # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":553 + * + * @property + * def T(self): # <<<<<<<<<<<<<< + * cdef _memoryviewslice result = memoryview_copy(self) + * transpose_memslice(&result.from_slice) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":560 + * @property + * def base(self): + * return self.obj # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->obj); + __pyx_r = __pyx_v_self->obj; + goto __pyx_L0; + + /* "View.MemoryView":559 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.obj + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_length; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":564 + * @property + * def shape(self): + * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_length = (__pyx_t_2[0]); + __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 564, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":563 + * + * @property + * def shape(self): # <<<<<<<<<<<<<< + * return tuple([length for length in self.view.shape[:self.view.ndim]]) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_stride; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 570, __pyx_L1_error) + + /* "View.MemoryView":568 + * @property + * def strides(self): + * if self.view.strides == NULL: # <<<<<<<<<<<<<< + * + * raise ValueError("Buffer view does not expose strides") + */ + } + + /* "View.MemoryView":572 + * raise ValueError("Buffer view does not expose strides") + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_v_stride = (__pyx_t_3[0]); + __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "View.MemoryView":567 + * + * @property + * def strides(self): # <<<<<<<<<<<<<< + * if self.view.strides == NULL: + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + Py_ssize_t *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__12, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":576 + * @property + * def suboffsets(self): + * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< + * return (-1,) * self.view.ndim + * + */ + } + + /* "View.MemoryView":579 + * return (-1,) * self.view.ndim + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim); + for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) { + __pyx_t_4 = __pyx_t_6; + __pyx_v_suboffset = (__pyx_t_4[0]); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":575 + * + * @property + * def suboffsets(self): # <<<<<<<<<<<<<< + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__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("__get__", 0); + + /* "View.MemoryView":583 + * @property + * def ndim(self): + * return self.view.ndim # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 583, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":582 + * + * @property + * def ndim(self): # <<<<<<<<<<<<<< + * return self.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__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("__get__", 0); + + /* "View.MemoryView":587 + * @property + * def itemsize(self): + * return self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 587, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":586 + * + * @property + * def itemsize(self): # <<<<<<<<<<<<<< + * return self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":591 + * @property + * def nbytes(self): + * return self.size * self.view.itemsize # <<<<<<<<<<<<<< + * + * @property + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":590 + * + * @property + * def nbytes(self): # <<<<<<<<<<<<<< + * return self.size * self.view.itemsize + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + Py_ssize_t *__pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + __pyx_t_1 = (__pyx_v_self->_size == Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":596 + * def size(self): + * if self._size is None: + * result = 1 # <<<<<<<<<<<<<< + * + * for length in self.view.shape[:self.view.ndim]: + */ + __Pyx_INCREF(__pyx_int_1); + __pyx_v_result = __pyx_int_1; + + /* "View.MemoryView":598 + * result = 1 + * + * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<< + * result *= length + * + */ + __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); + for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { + __pyx_t_3 = __pyx_t_5; + __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 598, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6); + __pyx_t_6 = 0; + + /* "View.MemoryView":599 + * + * for length in self.view.shape[:self.view.ndim]: + * result *= length # <<<<<<<<<<<<<< + * + * self._size = result + */ + __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 599, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6); + __pyx_t_6 = 0; + } + + /* "View.MemoryView":601 + * result *= length + * + * self._size = result # <<<<<<<<<<<<<< + * + * return self._size + */ + __Pyx_INCREF(__pyx_v_result); + __Pyx_GIVEREF(__pyx_v_result); + __Pyx_GOTREF(__pyx_v_self->_size); + __Pyx_DECREF(__pyx_v_self->_size); + __pyx_v_self->_size = __pyx_v_result; + + /* "View.MemoryView":595 + * @property + * def size(self): + * if self._size is None: # <<<<<<<<<<<<<< + * result = 1 + * + */ + } + + /* "View.MemoryView":603 + * self._size = result + * + * return self._size # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->_size); + __pyx_r = __pyx_v_self->_size; + goto __pyx_L0; + + /* "View.MemoryView":594 + * + * @property + * def size(self): # <<<<<<<<<<<<<< + * if self._size is None: + * result = 1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__len__", 0); + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":607 + * def __len__(self): + * if self.view.ndim >= 1: + * return self.view.shape[0] # <<<<<<<<<<<<<< + * + * return 0 + */ + __pyx_r = (__pyx_v_self->view.shape[0]); + goto __pyx_L0; + + /* "View.MemoryView":606 + * + * def __len__(self): + * if self.view.ndim >= 1: # <<<<<<<<<<<<<< + * return self.view.shape[0] + * + */ + } + + /* "View.MemoryView":609 + * return self.view.shape[0] + * + * return 0 # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":605 + * return self._size + * + * def __len__(self): # <<<<<<<<<<<<<< + * if self.view.ndim >= 1: + * return self.view.shape[0] + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "View.MemoryView":613 + * def __repr__(self): + * return "" % (self.base.__class__.__name__, + * id(self)) # <<<<<<<<<<<<<< + * + * def __str__(self): + */ + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 613, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "View.MemoryView":612 + * + * def __repr__(self): + * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< + * id(self)) + * + */ + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":611 + * return 0 + * + * def __repr__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__, + * id(self)) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__str__", 0); + + /* "View.MemoryView":616 + * + * def __str__(self): + * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 616, __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; + + /* "View.MemoryView":615 + * id(self)) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "" % (self.base.__class__.__name__,) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_c_contig", 0); + + /* "View.MemoryView":622 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 622, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":623 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<< + * + * def is_f_contig(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":619 + * + * + * def is_c_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice *__pyx_v_mslice; + __Pyx_memviewslice __pyx_v_tmp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("is_f_contig", 0); + + /* "View.MemoryView":628 + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + */ + __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 628, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":629 + * cdef __Pyx_memviewslice tmp + * mslice = get_slice_from_memview(self, &tmp) + * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<< + * + * def copy(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":625 + * return slice_is_contig(mslice[0], 'C', self.view.ndim) + * + * def is_f_contig(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice *mslice + * cdef __Pyx_memviewslice tmp + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_mslice; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy", 0); + + /* "View.MemoryView":633 + * def copy(self): + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &mslice) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); + + /* "View.MemoryView":635 + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + * + * slice_copy(self, &mslice) # <<<<<<<<<<<<<< + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); + + /* "View.MemoryView":636 + * + * slice_copy(self, &mslice) + * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_C_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 636, __pyx_L1_error) + __pyx_v_mslice = __pyx_t_1; + + /* "View.MemoryView":641 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< + * + * def copy_fortran(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":631 + * return slice_is_contig(mslice[0], 'F', self.view.ndim) + * + * def copy(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice mslice + * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + +/* Python wrapper */ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); + __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + int __pyx_v_flags; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_memviewslice __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("copy_fortran", 0); + + /* "View.MemoryView":645 + * def copy_fortran(self): + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< + * + * slice_copy(self, &src) + */ + __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); + + /* "View.MemoryView":647 + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + * + * slice_copy(self, &src) # <<<<<<<<<<<<<< + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, + * self.view.itemsize, + */ + __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); + + /* "View.MemoryView":648 + * + * slice_copy(self, &src) + * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< + * self.view.itemsize, + * flags|PyBUF_F_CONTIGUOUS, + */ + __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 648, __pyx_L1_error) + __pyx_v_dst = __pyx_t_1; + + /* "View.MemoryView":653 + * self.dtype_is_object) + * + * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 653, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":643 + * return memoryview_copy_from_slice(self, &mslice) + * + * def copy_fortran(self): # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice src, dst + * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __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): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + +static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { + struct __pyx_memoryview_obj *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); + + /* "View.MemoryView":658 + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< + * result.typeinfo = typeinfo + * return result + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_o); + __Pyx_GIVEREF(__pyx_v_o); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":659 + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_v_result->typeinfo = __pyx_v_typeinfo; + + /* "View.MemoryView":660 + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_check') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":657 + * + * @cname('__pyx_memoryview_new') + * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< + * cdef memoryview result = memoryview(o, flags, dtype_is_object) + * result.typeinfo = typeinfo + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + +static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("memoryview_check", 0); + + /* "View.MemoryView":664 + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): + * return isinstance(o, memoryview) # <<<<<<<<<<<<<< + * + * cdef tuple _unellipsify(object index, int ndim): + */ + __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); + __pyx_r = __pyx_t_1; + goto __pyx_L0; + + /* "View.MemoryView":663 + * + * @cname('__pyx_memoryview_check') + * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< + * return isinstance(o, memoryview) + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + +static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { + PyObject *__pyx_v_tup = NULL; + PyObject *__pyx_v_result = NULL; + int __pyx_v_have_slices; + int __pyx_v_seen_ellipsis; + CYTHON_UNUSED PyObject *__pyx_v_idx = NULL; + PyObject *__pyx_v_item = NULL; + Py_ssize_t __pyx_v_nslices; + 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)(PyObject *); + PyObject *__pyx_t_7 = NULL; + Py_ssize_t __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_unellipsify", 0); + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + __pyx_t_1 = PyTuple_Check(__pyx_v_index); + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":672 + * """ + * if not isinstance(index, tuple): + * tup = (index,) # <<<<<<<<<<<<<< + * else: + * tup = index + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 672, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_index); + __Pyx_GIVEREF(__pyx_v_index); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); + __pyx_v_tup = __pyx_t_3; + __pyx_t_3 = 0; + + /* "View.MemoryView":671 + * full slices. + * """ + * if not isinstance(index, tuple): # <<<<<<<<<<<<<< + * tup = (index,) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":674 + * tup = (index,) + * else: + * tup = index # <<<<<<<<<<<<<< + * + * result = [] + */ + /*else*/ { + __Pyx_INCREF(__pyx_v_index); + __pyx_v_tup = __pyx_v_index; + } + __pyx_L3:; + + /* "View.MemoryView":676 + * tup = index + * + * result = [] # <<<<<<<<<<<<<< + * have_slices = False + * seen_ellipsis = False + */ + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 676, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_result = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":677 + * + * result = [] + * have_slices = False # <<<<<<<<<<<<<< + * seen_ellipsis = False + * for idx, item in enumerate(tup): + */ + __pyx_v_have_slices = 0; + + /* "View.MemoryView":678 + * result = [] + * have_slices = False + * seen_ellipsis = False # <<<<<<<<<<<<<< + * for idx, item in enumerate(tup): + * if item is Ellipsis: + */ + __pyx_v_seen_ellipsis = 0; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + __Pyx_INCREF(__pyx_int_0); + __pyx_t_3 = __pyx_int_0; + if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) { + __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 679, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_4))) { + if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } else { + if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 679, __pyx_L1_error) + #else + __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } + } else { + __pyx_t_7 = __pyx_t_6(__pyx_t_4); + if (unlikely(!__pyx_t_7)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 679, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_7); + } + __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_INCREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3); + __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); + __pyx_t_3 = __pyx_t_7; + __pyx_t_7 = 0; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(1, 682, __pyx_L1_error) + __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__15); + __Pyx_GIVEREF(__pyx_slice__15); + PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__15); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "View.MemoryView":683 + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True # <<<<<<<<<<<<<< + * else: + * result.append(slice(None)) + */ + __pyx_v_seen_ellipsis = 1; + + /* "View.MemoryView":681 + * for idx, item in enumerate(tup): + * if item is Ellipsis: + * if not seen_ellipsis: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + * seen_ellipsis = True + */ + goto __pyx_L7; + } + + /* "View.MemoryView":685 + * seen_ellipsis = True + * else: + * result.append(slice(None)) # <<<<<<<<<<<<<< + * have_slices = True + * else: + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__15); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 685, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":686 + * else: + * result.append(slice(None)) + * have_slices = True # <<<<<<<<<<<<<< + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + */ + __pyx_v_have_slices = 1; + + /* "View.MemoryView":680 + * seen_ellipsis = False + * for idx, item in enumerate(tup): + * if item is Ellipsis: # <<<<<<<<<<<<<< + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) + */ + goto __pyx_L6; + } + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + /*else*/ { + __pyx_t_2 = PySlice_Check(__pyx_v_item); + __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0); + if (__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0); + __pyx_t_1 = __pyx_t_10; + __pyx_L9_bool_binop_done:; + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":689 + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): + * raise TypeError("Cannot index with type '%s'" % type(item)) # <<<<<<<<<<<<<< + * + * have_slices = have_slices or isinstance(item, slice) + */ + __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_Raise(__pyx_t_11, 0, 0, 0); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __PYX_ERR(1, 689, __pyx_L1_error) + + /* "View.MemoryView":688 + * have_slices = True + * else: + * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + */ + } + + /* "View.MemoryView":691 + * raise TypeError("Cannot index with type '%s'" % type(item)) + * + * have_slices = have_slices or isinstance(item, slice) # <<<<<<<<<<<<<< + * result.append(item) + * + */ + __pyx_t_10 = (__pyx_v_have_slices != 0); + if (!__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = PySlice_Check(__pyx_v_item); + __pyx_t_2 = (__pyx_t_10 != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L11_bool_binop_done:; + __pyx_v_have_slices = __pyx_t_1; + + /* "View.MemoryView":692 + * + * have_slices = have_slices or isinstance(item, slice) + * result.append(item) # <<<<<<<<<<<<<< + * + * nslices = ndim - len(result) + */ + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 692, __pyx_L1_error) + } + __pyx_L6:; + + /* "View.MemoryView":679 + * have_slices = False + * seen_ellipsis = False + * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< + * if item is Ellipsis: + * if not seen_ellipsis: + */ + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":694 + * result.append(item) + * + * nslices = ndim - len(result) # <<<<<<<<<<<<<< + * if nslices: + * result.extend([slice(None)] * nslices) + */ + __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 694, __pyx_L1_error) + __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5); + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + __pyx_t_1 = (__pyx_v_nslices != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":696 + * nslices = ndim - len(result) + * if nslices: + * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<< + * + * return have_slices or nslices, tuple(result) + */ + __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + { Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) { + __Pyx_INCREF(__pyx_slice__15); + __Pyx_GIVEREF(__pyx_slice__15); + PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__15); + } + } + __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 696, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":695 + * + * nslices = ndim - len(result) + * if nslices: # <<<<<<<<<<<<<< + * result.extend([slice(None)] * nslices) + * + */ + } + + /* "View.MemoryView":698 + * result.extend([slice(None)] * nslices) + * + * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + */ + __Pyx_XDECREF(__pyx_r); + if (!__pyx_v_have_slices) { + } else { + __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_L14_bool_binop_done:; + __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_r = ((PyObject*)__pyx_t_11); + __pyx_t_11 = 0; + goto __pyx_L0; + + /* "View.MemoryView":666 + * return isinstance(o, memoryview) + * + * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< + * """ + * Replace all ellipses with full slices and fill incomplete indices with + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_tup); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_idx); + __Pyx_XDECREF(__pyx_v_item); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + +static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); + + /* "View.MemoryView":701 + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") + */ + __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim); + for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) { + __pyx_t_1 = __pyx_t_3; + __pyx_v_suboffset = (__pyx_t_1[0]); + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0); + if (unlikely(__pyx_t_4)) { + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __PYX_ERR(1, 703, __pyx_L1_error) + + /* "View.MemoryView":702 + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * raise ValueError("Indirect dimensions not supported") + * + */ + } + } + + /* "View.MemoryView":700 + * return have_slices or nslices, tuple(result) + * + * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + +static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { + int __pyx_v_new_ndim; + int __pyx_v_suboffset_dim; + int __pyx_v_dim; + __Pyx_memviewslice __pyx_v_src; + __Pyx_memviewslice __pyx_v_dst; + __Pyx_memviewslice *__pyx_v_p_src; + struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; + __Pyx_memviewslice *__pyx_v_p_dst; + int *__pyx_v_p_suboffset_dim; + Py_ssize_t __pyx_v_start; + Py_ssize_t __pyx_v_stop; + Py_ssize_t __pyx_v_step; + int __pyx_v_have_start; + int __pyx_v_have_stop; + int __pyx_v_have_step; + PyObject *__pyx_v_index = NULL; + struct __pyx_memoryview_obj *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + struct __pyx_memoryview_obj *__pyx_t_4; + char *__pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + PyObject *(*__pyx_t_8)(PyObject *); + PyObject *__pyx_t_9 = NULL; + Py_ssize_t __pyx_t_10; + int __pyx_t_11; + Py_ssize_t __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memview_slice", 0); + + /* "View.MemoryView":711 + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): + * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< + * cdef bint negative_step + * cdef __Pyx_memviewslice src, dst + */ + __pyx_v_new_ndim = 0; + __pyx_v_suboffset_dim = -1; + + /* "View.MemoryView":718 + * + * + * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< + * + * cdef _memoryviewslice memviewsliceobj + */ + (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst)))); + + /* "View.MemoryView":722 + * cdef _memoryviewslice memviewsliceobj + * + * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(!Py_OptimizeFlag)) { + if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) { + PyErr_SetNone(PyExc_AssertionError); + __PYX_ERR(1, 722, __pyx_L1_error) + } + } + #endif + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":725 + * + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview # <<<<<<<<<<<<<< + * p_src = &memviewsliceobj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 725, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":726 + * if isinstance(memview, _memoryviewslice): + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, &src) + */ + __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); + + /* "View.MemoryView":724 + * assert memview.view.ndim > 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * memviewsliceobj = memview + * p_src = &memviewsliceobj.from_slice + */ + goto __pyx_L3; + } + + /* "View.MemoryView":728 + * p_src = &memviewsliceobj.from_slice + * else: + * slice_copy(memview, &src) # <<<<<<<<<<<<<< + * p_src = &src + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); + + /* "View.MemoryView":729 + * else: + * slice_copy(memview, &src) + * p_src = &src # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_p_src = (&__pyx_v_src); + } + __pyx_L3:; + + /* "View.MemoryView":735 + * + * + * dst.memview = p_src.memview # <<<<<<<<<<<<<< + * dst.data = p_src.data + * + */ + __pyx_t_4 = __pyx_v_p_src->memview; + __pyx_v_dst.memview = __pyx_t_4; + + /* "View.MemoryView":736 + * + * dst.memview = p_src.memview + * dst.data = p_src.data # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_v_p_src->data; + __pyx_v_dst.data = __pyx_t_5; + + /* "View.MemoryView":741 + * + * + * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< + * cdef int *p_suboffset_dim = &suboffset_dim + * cdef Py_ssize_t start, stop, step + */ + __pyx_v_p_dst = (&__pyx_v_dst); + + /* "View.MemoryView":742 + * + * cdef __Pyx_memviewslice *p_dst = &dst + * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< + * cdef Py_ssize_t start, stop, step + * cdef bint have_start, have_stop, have_step + */ + __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + __pyx_t_6 = 0; + if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { + __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + } else { + __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 746, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_8)) { + if (likely(PyList_CheckExact(__pyx_t_3))) { + if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } else { + if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 746, __pyx_L1_error) + #else + __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + #endif + } + } else { + __pyx_t_9 = __pyx_t_8(__pyx_t_3); + if (unlikely(!__pyx_t_9)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 746, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_9); + } + __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9); + __pyx_t_9 = 0; + __pyx_v_dim = __pyx_t_6; + __pyx_t_6 = (__pyx_t_6 + 1); + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":751 + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + * index, 0, 0, # start, stop, step # <<<<<<<<<<<<<< + * 0, 0, 0, # have_{start,stop,step} + * False) + */ + __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 751, __pyx_L1_error) + + /* "View.MemoryView":748 + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 748, __pyx_L1_error) + + /* "View.MemoryView":747 + * + * for dim, index in enumerate(indices): + * if PyIndex_Check(index): # <<<<<<<<<<<<<< + * slice_memviewslice( + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + */ + goto __pyx_L6; + } + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + __pyx_t_2 = (__pyx_v_index == Py_None); + __pyx_t_1 = (__pyx_t_2 != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":755 + * False) + * elif index is None: + * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + */ + (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; + + /* "View.MemoryView":756 + * elif index is None: + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 + */ + (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; + + /* "View.MemoryView":757 + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< + * new_ndim += 1 + * else: + */ + (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L; + + /* "View.MemoryView":758 + * p_dst.strides[new_ndim] = 0 + * p_dst.suboffsets[new_ndim] = -1 + * new_ndim += 1 # <<<<<<<<<<<<<< + * else: + * start = index.start or 0 + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + + /* "View.MemoryView":754 + * 0, 0, 0, # have_{start,stop,step} + * False) + * elif index is None: # <<<<<<<<<<<<<< + * p_dst.shape[new_ndim] = 1 + * p_dst.strides[new_ndim] = 0 + */ + goto __pyx_L6; + } + + /* "View.MemoryView":760 + * new_ndim += 1 + * else: + * start = index.start or 0 # <<<<<<<<<<<<<< + * stop = index.stop or 0 + * step = index.step or 0 + */ + /*else*/ { + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 760, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 760, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L7_bool_binop_done:; + __pyx_v_start = __pyx_t_10; + + /* "View.MemoryView":761 + * else: + * start = index.start or 0 + * stop = index.stop or 0 # <<<<<<<<<<<<<< + * step = index.step or 0 + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 761, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 761, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L9_bool_binop_done:; + __pyx_v_stop = __pyx_t_10; + + /* "View.MemoryView":762 + * start = index.start or 0 + * stop = index.stop or 0 + * step = index.step or 0 # <<<<<<<<<<<<<< + * + * have_start = index.start is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 762, __pyx_L1_error) + if (!__pyx_t_1) { + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } else { + __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 762, __pyx_L1_error) + __pyx_t_10 = __pyx_t_12; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_10 = 0; + __pyx_L11_bool_binop_done:; + __pyx_v_step = __pyx_t_10; + + /* "View.MemoryView":764 + * step = index.step or 0 + * + * have_start = index.start is not None # <<<<<<<<<<<<<< + * have_stop = index.stop is not None + * have_step = index.step is not None + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_start = __pyx_t_1; + + /* "View.MemoryView":765 + * + * have_start = index.start is not None + * have_stop = index.stop is not None # <<<<<<<<<<<<<< + * have_step = index.step is not None + * + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_stop = __pyx_t_1; + + /* "View.MemoryView":766 + * have_start = index.start is not None + * have_stop = index.stop is not None + * have_step = index.step is not None # <<<<<<<<<<<<<< + * + * slice_memviewslice( + */ + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_1 = (__pyx_t_9 != Py_None); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_v_have_step = __pyx_t_1; + + /* "View.MemoryView":768 + * have_step = index.step is not None + * + * slice_memviewslice( # <<<<<<<<<<<<<< + * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], + * dim, new_ndim, p_suboffset_dim, + */ + __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 768, __pyx_L1_error) + + /* "View.MemoryView":774 + * have_start, have_stop, have_step, + * True) + * new_ndim += 1 # <<<<<<<<<<<<<< + * + * if isinstance(memview, _memoryviewslice): + */ + __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); + } + __pyx_L6:; + + /* "View.MemoryView":746 + * cdef bint have_start, have_stop, have_step + * + * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< + * if PyIndex_Check(index): + * slice_memviewslice( + */ + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":778 + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< + * memviewsliceobj.to_dtype_func, + * memview.dtype_is_object) + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 778, __pyx_L1_error) } + + /* "View.MemoryView":779 + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * else: + */ + if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 779, __pyx_L1_error) } + + /* "View.MemoryView":777 + * + * if isinstance(memview, _memoryviewslice): + * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< + * memviewsliceobj.to_object_func, + * memviewsliceobj.to_dtype_func, + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 777, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 777, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "View.MemoryView":776 + * new_ndim += 1 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * return memoryview_fromslice(dst, new_ndim, + * memviewsliceobj.to_object_func, + */ + } + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + /*else*/ { + __Pyx_XDECREF(((PyObject *)__pyx_r)); + + /* "View.MemoryView":783 + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "View.MemoryView":782 + * memview.dtype_is_object) + * else: + * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< + * memview.dtype_is_object) + * + */ + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 782, __pyx_L1_error) + __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":710 + * + * @cname('__pyx_memview_slice') + * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< + * cdef int new_ndim = 0, suboffset_dim = -1, dim + * cdef bint negative_step + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + +static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { + Py_ssize_t __pyx_v_new_shape; + int __pyx_v_negative_step; + int __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + __pyx_t_1 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":830 + * + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":829 + * if not is_slice: + * + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if not 0 <= start < shape: + */ + } + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + __pyx_t_1 = (0 <= __pyx_v_start); + if (__pyx_t_1) { + __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); + } + __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":832 + * start += shape + * if not 0 <= start < shape: + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< + * else: + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 832, __pyx_L1_error) + + /* "View.MemoryView":831 + * if start < 0: + * start += shape + * if not 0 <= start < shape: # <<<<<<<<<<<<<< + * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) + * else: + */ + } + + /* "View.MemoryView":827 + * cdef bint negative_step + * + * if not is_slice: # <<<<<<<<<<<<<< + * + * if start < 0: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":835 + * else: + * + * negative_step = have_step != 0 and step < 0 # <<<<<<<<<<<<<< + * + * if have_step and step == 0: + */ + /*else*/ { + __pyx_t_1 = ((__pyx_v_have_step != 0) != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step < 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L6_bool_binop_done:; + __pyx_v_negative_step = __pyx_t_2; + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + __pyx_t_1 = (__pyx_v_have_step != 0); + if (__pyx_t_1) { + } else { + __pyx_t_2 = __pyx_t_1; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_1 = ((__pyx_v_step == 0) != 0); + __pyx_t_2 = __pyx_t_1; + __pyx_L9_bool_binop_done:; + if (__pyx_t_2) { + + /* "View.MemoryView":838 + * + * if have_step and step == 0: + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 838, __pyx_L1_error) + + /* "View.MemoryView":837 + * negative_step = have_step != 0 and step < 0 + * + * if have_step and step == 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) + * + */ + } + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + __pyx_t_2 = (__pyx_v_have_start != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":843 + * if have_start: + * if start < 0: + * start += shape # <<<<<<<<<<<<<< + * if start < 0: + * start = 0 + */ + __pyx_v_start = (__pyx_v_start + __pyx_v_shape); + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + __pyx_t_2 = ((__pyx_v_start < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":845 + * start += shape + * if start < 0: + * start = 0 # <<<<<<<<<<<<<< + * elif start >= shape: + * if negative_step: + */ + __pyx_v_start = 0; + + /* "View.MemoryView":844 + * if start < 0: + * start += shape + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * elif start >= shape: + */ + } + + /* "View.MemoryView":842 + * + * if have_start: + * if start < 0: # <<<<<<<<<<<<<< + * start += shape + * if start < 0: + */ + goto __pyx_L12; + } + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":848 + * elif start >= shape: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = shape + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":847 + * start = 0 + * elif start >= shape: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L14; + } + + /* "View.MemoryView":850 + * start = shape - 1 + * else: + * start = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + /*else*/ { + __pyx_v_start = __pyx_v_shape; + } + __pyx_L14:; + + /* "View.MemoryView":846 + * if start < 0: + * start = 0 + * elif start >= shape: # <<<<<<<<<<<<<< + * if negative_step: + * start = shape - 1 + */ + } + __pyx_L12:; + + /* "View.MemoryView":841 + * + * + * if have_start: # <<<<<<<<<<<<<< + * if start < 0: + * start += shape + */ + goto __pyx_L11; + } + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":853 + * else: + * if negative_step: + * start = shape - 1 # <<<<<<<<<<<<<< + * else: + * start = 0 + */ + __pyx_v_start = (__pyx_v_shape - 1); + + /* "View.MemoryView":852 + * start = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * start = shape - 1 + * else: + */ + goto __pyx_L15; + } + + /* "View.MemoryView":855 + * start = shape - 1 + * else: + * start = 0 # <<<<<<<<<<<<<< + * + * if have_stop: + */ + /*else*/ { + __pyx_v_start = 0; + } + __pyx_L15:; + } + __pyx_L11:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + __pyx_t_2 = (__pyx_v_have_stop != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":859 + * if have_stop: + * if stop < 0: + * stop += shape # <<<<<<<<<<<<<< + * if stop < 0: + * stop = 0 + */ + __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + __pyx_t_2 = ((__pyx_v_stop < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":861 + * stop += shape + * if stop < 0: + * stop = 0 # <<<<<<<<<<<<<< + * elif stop > shape: + * stop = shape + */ + __pyx_v_stop = 0; + + /* "View.MemoryView":860 + * if stop < 0: + * stop += shape + * if stop < 0: # <<<<<<<<<<<<<< + * stop = 0 + * elif stop > shape: + */ + } + + /* "View.MemoryView":858 + * + * if have_stop: + * if stop < 0: # <<<<<<<<<<<<<< + * stop += shape + * if stop < 0: + */ + goto __pyx_L17; + } + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":863 + * stop = 0 + * elif stop > shape: + * stop = shape # <<<<<<<<<<<<<< + * else: + * if negative_step: + */ + __pyx_v_stop = __pyx_v_shape; + + /* "View.MemoryView":862 + * if stop < 0: + * stop = 0 + * elif stop > shape: # <<<<<<<<<<<<<< + * stop = shape + * else: + */ + } + __pyx_L17:; + + /* "View.MemoryView":857 + * start = 0 + * + * if have_stop: # <<<<<<<<<<<<<< + * if stop < 0: + * stop += shape + */ + goto __pyx_L16; + } + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_negative_step != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":866 + * else: + * if negative_step: + * stop = -1 # <<<<<<<<<<<<<< + * else: + * stop = shape + */ + __pyx_v_stop = -1L; + + /* "View.MemoryView":865 + * stop = shape + * else: + * if negative_step: # <<<<<<<<<<<<<< + * stop = -1 + * else: + */ + goto __pyx_L19; + } + + /* "View.MemoryView":868 + * stop = -1 + * else: + * stop = shape # <<<<<<<<<<<<<< + * + * if not have_step: + */ + /*else*/ { + __pyx_v_stop = __pyx_v_shape; + } + __pyx_L19:; + } + __pyx_L16:; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":871 + * + * if not have_step: + * step = 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_step = 1; + + /* "View.MemoryView":870 + * stop = shape + * + * if not have_step: # <<<<<<<<<<<<<< + * step = 1 + * + */ + } + + /* "View.MemoryView":875 + * + * with cython.cdivision(True): + * new_shape = (stop - start) // step # <<<<<<<<<<<<<< + * + * if (stop - start) - step * new_shape: + */ + __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":878 + * + * if (stop - start) - step * new_shape: + * new_shape += 1 # <<<<<<<<<<<<<< + * + * if new_shape < 0: + */ + __pyx_v_new_shape = (__pyx_v_new_shape + 1); + + /* "View.MemoryView":877 + * new_shape = (stop - start) // step + * + * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< + * new_shape += 1 + * + */ + } + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":881 + * + * if new_shape < 0: + * new_shape = 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_new_shape = 0; + + /* "View.MemoryView":880 + * new_shape += 1 + * + * if new_shape < 0: # <<<<<<<<<<<<<< + * new_shape = 0 + * + */ + } + + /* "View.MemoryView":884 + * + * + * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset + */ + (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); + + /* "View.MemoryView":885 + * + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< + * dst.suboffsets[new_ndim] = suboffset + * + */ + (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; + + /* "View.MemoryView":886 + * dst.strides[new_ndim] = stride * step + * dst.shape[new_ndim] = new_shape + * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; + } + __pyx_L3:; + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":890 + * + * if suboffset_dim[0] < 0: + * dst.data += start * stride # <<<<<<<<<<<<<< + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride + */ + __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); + + /* "View.MemoryView":889 + * + * + * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< + * dst.data += start * stride + * else: + */ + goto __pyx_L23; + } + + /* "View.MemoryView":892 + * dst.data += start * stride + * else: + * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< + * + * if suboffset >= 0: + */ + /*else*/ { + __pyx_t_3 = (__pyx_v_suboffset_dim[0]); + (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); + } + __pyx_L23:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":897 + * if not is_slice: + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + */ + __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":896 + * if suboffset >= 0: + * if not is_slice: + * if new_ndim == 0: # <<<<<<<<<<<<<< + * dst.data = ( dst.data)[0] + suboffset + * else: + */ + goto __pyx_L26; + } + + /* "View.MemoryView":899 + * dst.data = ( dst.data)[0] + suboffset + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< + * "must be indexed and not sliced", dim) + * else: + */ + /*else*/ { + + /* "View.MemoryView":900 + * else: + * _err_dim(IndexError, "All dimensions preceding dimension %d " + * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<< + * else: + * suboffset_dim[0] = new_ndim + */ + __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 899, __pyx_L1_error) + } + __pyx_L26:; + + /* "View.MemoryView":895 + * + * if suboffset >= 0: + * if not is_slice: # <<<<<<<<<<<<<< + * if new_ndim == 0: + * dst.data = ( dst.data)[0] + suboffset + */ + goto __pyx_L25; + } + + /* "View.MemoryView":902 + * "must be indexed and not sliced", dim) + * else: + * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< + * + * return 0 + */ + /*else*/ { + (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; + } + __pyx_L25:; + + /* "View.MemoryView":894 + * dst.suboffsets[suboffset_dim[0]] += start * stride + * + * if suboffset >= 0: # <<<<<<<<<<<<<< + * if not is_slice: + * if new_ndim == 0: + */ + } + + /* "View.MemoryView":904 + * suboffset_dim[0] = new_ndim + * + * return 0 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":807 + * + * @cname('__pyx_memoryview_slice_memviewslice') + * cdef int slice_memviewslice( # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + +static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_suboffset; + Py_ssize_t __pyx_v_itemsize; + char *__pyx_v_resultp; + char *__pyx_r; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("pybuffer_index", 0); + + /* "View.MemoryView":912 + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< + * cdef Py_ssize_t itemsize = view.itemsize + * cdef char *resultp + */ + __pyx_v_suboffset = -1L; + + /* "View.MemoryView":913 + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< + * cdef char *resultp + * + */ + __pyx_t_1 = __pyx_v_view->itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":917 + * + * if view.ndim == 0: + * shape = view.len / itemsize # <<<<<<<<<<<<<< + * stride = itemsize + * else: + */ + if (unlikely(__pyx_v_itemsize == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); + __PYX_ERR(1, 917, __pyx_L1_error) + } + else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { + PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); + __PYX_ERR(1, 917, __pyx_L1_error) + } + __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize); + + /* "View.MemoryView":918 + * if view.ndim == 0: + * shape = view.len / itemsize + * stride = itemsize # <<<<<<<<<<<<<< + * else: + * shape = view.shape[dim] + */ + __pyx_v_stride = __pyx_v_itemsize; + + /* "View.MemoryView":916 + * cdef char *resultp + * + * if view.ndim == 0: # <<<<<<<<<<<<<< + * shape = view.len / itemsize + * stride = itemsize + */ + goto __pyx_L3; + } + + /* "View.MemoryView":920 + * stride = itemsize + * else: + * shape = view.shape[dim] # <<<<<<<<<<<<<< + * stride = view.strides[dim] + * if view.suboffsets != NULL: + */ + /*else*/ { + __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); + + /* "View.MemoryView":921 + * else: + * shape = view.shape[dim] + * stride = view.strides[dim] # <<<<<<<<<<<<<< + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] + */ + __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":923 + * stride = view.strides[dim] + * if view.suboffsets != NULL: + * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< + * + * if index < 0: + */ + __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); + + /* "View.MemoryView":922 + * shape = view.shape[dim] + * stride = view.strides[dim] + * if view.suboffsets != NULL: # <<<<<<<<<<<<<< + * suboffset = view.suboffsets[dim] + * + */ + } + } + __pyx_L3:; + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":926 + * + * if index < 0: + * index += view.shape[dim] # <<<<<<<<<<<<<< + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + */ + __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":928 + * index += view.shape[dim] + * if index < 0: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * if index >= shape: + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 928, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 928, __pyx_L1_error) + + /* "View.MemoryView":927 + * if index < 0: + * index += view.shape[dim] + * if index < 0: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":925 + * suboffset = view.suboffsets[dim] + * + * if index < 0: # <<<<<<<<<<<<<< + * index += view.shape[dim] + * if index < 0: + */ + } + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0); + if (unlikely(__pyx_t_2)) { + + /* "View.MemoryView":931 + * + * if index >= shape: + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< + * + * resultp = bufp + index * stride + */ + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 931, __pyx_L1_error) + + /* "View.MemoryView":930 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * if index >= shape: # <<<<<<<<<<<<<< + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + */ + } + + /* "View.MemoryView":933 + * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) + * + * resultp = bufp + index * stride # <<<<<<<<<<<<<< + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset + */ + __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":935 + * resultp = bufp + index * stride + * if suboffset >= 0: + * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< + * + * return resultp + */ + __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); + + /* "View.MemoryView":934 + * + * resultp = bufp + index * stride + * if suboffset >= 0: # <<<<<<<<<<<<<< + * resultp = ( resultp)[0] + suboffset + * + */ + } + + /* "View.MemoryView":937 + * resultp = ( resultp)[0] + suboffset + * + * return resultp # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_resultp; + goto __pyx_L0; + + /* "View.MemoryView":910 + * + * @cname('__pyx_pybuffer_index') + * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< + * Py_ssize_t dim) except NULL: + * cdef Py_ssize_t shape, stride, suboffset = -1 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + +static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { + int __pyx_v_ndim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + int __pyx_v_i; + int __pyx_v_j; + int __pyx_r; + int __pyx_t_1; + Py_ssize_t *__pyx_t_2; + long __pyx_t_3; + long __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":944 + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: + * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< + * + * cdef Py_ssize_t *shape = memslice.shape + */ + __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; + __pyx_v_ndim = __pyx_t_1; + + /* "View.MemoryView":946 + * cdef int ndim = memslice.memview.view.ndim + * + * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< + * cdef Py_ssize_t *strides = memslice.strides + * + */ + __pyx_t_2 = __pyx_v_memslice->shape; + __pyx_v_shape = __pyx_t_2; + + /* "View.MemoryView":947 + * + * cdef Py_ssize_t *shape = memslice.shape + * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __pyx_v_memslice->strides; + __pyx_v_strides = __pyx_t_2; + + /* "View.MemoryView":951 + * + * cdef int i, j + * for i in range(ndim / 2): # <<<<<<<<<<<<<< + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + */ + __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2); + __pyx_t_4 = __pyx_t_3; + for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":952 + * cdef int i, j + * for i in range(ndim / 2): + * j = ndim - 1 - i # <<<<<<<<<<<<<< + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] + */ + __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); + + /* "View.MemoryView":953 + * for i in range(ndim / 2): + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< + * shape[i], shape[j] = shape[j], shape[i] + * + */ + __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]); + __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]); + (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5; + (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6; + + /* "View.MemoryView":954 + * j = ndim - 1 - i + * strides[i], strides[j] = strides[j], strides[i] + * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + */ + __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]); + __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]); + (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6; + (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5; + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0); + if (!__pyx_t_8) { + } else { + __pyx_t_7 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0); + __pyx_t_7 = __pyx_t_8; + __pyx_L6_bool_binop_done:; + if (__pyx_t_7) { + + /* "View.MemoryView":957 + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< + * + * return 1 + */ + __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 957, __pyx_L1_error) + + /* "View.MemoryView":956 + * shape[i], shape[j] = shape[j], shape[i] + * + * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + */ + } + } + + /* "View.MemoryView":959 + * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") + * + * return 1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = 1; + goto __pyx_L0; + + /* "View.MemoryView":943 + * + * @cname('__pyx_memslice_transpose') + * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< + * cdef int ndim = memslice.memview.view.ndim + * + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = 0; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + +/* Python wrapper */ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "View.MemoryView":977 + * + * def __dealloc__(self): + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< + * + * cdef convert_item_to_object(self, char *itemp): + */ + __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1); + + /* "View.MemoryView":976 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + +static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("convert_item_to_object", 0); + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":981 + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) # <<<<<<<<<<<<<< + * else: + * return memoryview.convert_item_to_object(self, itemp) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 981, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "View.MemoryView":980 + * + * cdef convert_item_to_object(self, char *itemp): + * if self.to_object_func != NULL: # <<<<<<<<<<<<<< + * return self.to_object_func(itemp) + * else: + */ + } + + /* "View.MemoryView":983 + * return self.to_object_func(itemp) + * else: + * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< + * + * cdef assign_item_from_object(self, char *itemp, object value): + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 983, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + } + + /* "View.MemoryView":979 + * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) + * + * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< + * if self.to_object_func != NULL: + * return self.to_object_func(itemp) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + +static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("assign_item_from_object", 0); + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":987 + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< + * else: + * memoryview.assign_item_from_object(self, itemp, value) + */ + __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 987, __pyx_L1_error) + + /* "View.MemoryView":986 + * + * cdef assign_item_from_object(self, char *itemp, object value): + * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< + * self.to_dtype_func(itemp, value) + * else: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":989 + * self.to_dtype_func(itemp, value) + * else: + * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< + * + * @property + */ + /*else*/ { + __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 989, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L3:; + + /* "View.MemoryView":985 + * return memoryview.convert_item_to_object(self, itemp) + * + * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< + * if self.to_dtype_func != NULL: + * self.to_dtype_func(itemp, value) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 0); + + /* "View.MemoryView":993 + * @property + * def base(self): + * return self.from_object # <<<<<<<<<<<<<< + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->from_object); + __pyx_r = __pyx_v_self->from_object; + goto __pyx_L0; + + /* "View.MemoryView":992 + * + * @property + * def base(self): # <<<<<<<<<<<<<< + * return self.from_object + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__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("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + 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__", 0); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + +static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { + struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; + Py_ssize_t __pyx_v_suboffset; + PyObject *__pyx_v_length = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + __Pyx_TypeInfo *__pyx_t_4; + Py_buffer __pyx_t_5; + Py_ssize_t *__pyx_t_6; + Py_ssize_t *__pyx_t_7; + Py_ssize_t *__pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_fromslice", 0); + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1008 + * + * if memviewslice.memview == Py_None: + * return None # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "View.MemoryView":1007 + * cdef _memoryviewslice result + * + * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "View.MemoryView":1013 + * + * + * result = _memoryviewslice(None, 0, dtype_is_object) # <<<<<<<<<<<<<< + * + * result.from_slice = memviewslice + */ + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1015 + * result = _memoryviewslice(None, 0, dtype_is_object) + * + * result.from_slice = memviewslice # <<<<<<<<<<<<<< + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + */ + __pyx_v_result->from_slice = __pyx_v_memviewslice; + + /* "View.MemoryView":1016 + * + * result.from_slice = memviewslice + * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< + * + * result.from_object = ( memviewslice.memview).base + */ + __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); + + /* "View.MemoryView":1018 + * __PYX_INC_MEMVIEW(&memviewslice, 1) + * + * result.from_object = ( memviewslice.memview).base # <<<<<<<<<<<<<< + * result.typeinfo = memviewslice.memview.typeinfo + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1018, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_result->from_object); + __Pyx_DECREF(__pyx_v_result->from_object); + __pyx_v_result->from_object = __pyx_t_2; + __pyx_t_2 = 0; + + /* "View.MemoryView":1019 + * + * result.from_object = ( memviewslice.memview).base + * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< + * + * result.view = memviewslice.memview.view + */ + __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; + __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; + + /* "View.MemoryView":1021 + * result.typeinfo = memviewslice.memview.typeinfo + * + * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + */ + __pyx_t_5 = __pyx_v_memviewslice.memview->view; + __pyx_v_result->__pyx_base.view = __pyx_t_5; + + /* "View.MemoryView":1022 + * + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + */ + __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); + + /* "View.MemoryView":1023 + * result.view = memviewslice.memview.view + * result.view.buf = memviewslice.data + * result.view.ndim = ndim # <<<<<<<<<<<<<< + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) + */ + __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; + + /* "View.MemoryView":1024 + * result.view.buf = memviewslice.data + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< + * Py_INCREF(Py_None) + * + */ + ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; + + /* "View.MemoryView":1025 + * result.view.ndim = ndim + * (<__pyx_buffer *> &result.view).obj = Py_None + * Py_INCREF(Py_None) # <<<<<<<<<<<<<< + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + */ + Py_INCREF(Py_None); + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1028 + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: + * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< + * else: + * result.flags = PyBUF_RECORDS_RO + */ + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; + + /* "View.MemoryView":1027 + * Py_INCREF(Py_None) + * + * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< + * result.flags = PyBUF_RECORDS + * else: + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1030 + * result.flags = PyBUF_RECORDS + * else: + * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<< + * + * result.view.shape = result.from_slice.shape + */ + /*else*/ { + __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO; + } + __pyx_L4:; + + /* "View.MemoryView":1032 + * result.flags = PyBUF_RECORDS_RO + * + * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< + * result.view.strides = result.from_slice.strides + * + */ + __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); + + /* "View.MemoryView":1033 + * + * result.view.shape = result.from_slice.shape + * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); + + /* "View.MemoryView":1036 + * + * + * result.view.suboffsets = NULL # <<<<<<<<<<<<<< + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + */ + __pyx_v_result->__pyx_base.view.suboffsets = NULL; + + /* "View.MemoryView":1037 + * + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<< + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + */ + __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_v_suboffset = (__pyx_t_6[0]); + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1039 + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); + + /* "View.MemoryView":1040 + * if suboffset >= 0: + * result.view.suboffsets = result.from_slice.suboffsets + * break # <<<<<<<<<<<<<< + * + * result.view.len = result.view.itemsize + */ + goto __pyx_L6_break; + + /* "View.MemoryView":1038 + * result.view.suboffsets = NULL + * for suboffset in result.from_slice.suboffsets[:ndim]: + * if suboffset >= 0: # <<<<<<<<<<<<<< + * result.view.suboffsets = result.from_slice.suboffsets + * break + */ + } + } + __pyx_L6_break:; + + /* "View.MemoryView":1042 + * break + * + * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< + * for length in result.view.shape[:ndim]: + * result.view.len *= length + */ + __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + + /* "View.MemoryView":1043 + * + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<< + * result.view.len *= length + * + */ + __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim); + for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { + __pyx_t_6 = __pyx_t_8; + __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1043, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2); + __pyx_t_2 = 0; + + /* "View.MemoryView":1044 + * result.view.len = result.view.itemsize + * for length in result.view.shape[:ndim]: + * result.view.len *= length # <<<<<<<<<<<<<< + * + * result.to_object_func = to_object_func + */ + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1044, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result->__pyx_base.view.len = __pyx_t_9; + } + + /* "View.MemoryView":1046 + * result.view.len *= length + * + * result.to_object_func = to_object_func # <<<<<<<<<<<<<< + * result.to_dtype_func = to_dtype_func + * + */ + __pyx_v_result->to_object_func = __pyx_v_to_object_func; + + /* "View.MemoryView":1047 + * + * result.to_object_func = to_object_func + * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< + * + * return result + */ + __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; + + /* "View.MemoryView":1049 + * result.to_dtype_func = to_dtype_func + * + * return result # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyObject *)__pyx_v_result); + goto __pyx_L0; + + /* "View.MemoryView":999 + * + * @cname('__pyx_memoryview_fromslice') + * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< + * int ndim, + * object (*to_object_func)(char *), + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XDECREF(__pyx_v_length); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + +static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { + struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; + __Pyx_memviewslice *__pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_slice_from_memview", 0); + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1056 + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): + * obj = memview # <<<<<<<<<<<<<< + * return &obj.from_slice + * else: + */ + if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 1056, __pyx_L1_error) + __pyx_t_3 = ((PyObject *)__pyx_v_memview); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "View.MemoryView":1057 + * if isinstance(memview, _memoryviewslice): + * obj = memview + * return &obj.from_slice # <<<<<<<<<<<<<< + * else: + * slice_copy(memview, mslice) + */ + __pyx_r = (&__pyx_v_obj->from_slice); + goto __pyx_L0; + + /* "View.MemoryView":1055 + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * obj = memview + * return &obj.from_slice + */ + } + + /* "View.MemoryView":1059 + * return &obj.from_slice + * else: + * slice_copy(memview, mslice) # <<<<<<<<<<<<<< + * return mslice + * + */ + /*else*/ { + __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); + + /* "View.MemoryView":1060 + * else: + * slice_copy(memview, mslice) + * return mslice # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_slice_copy') + */ + __pyx_r = __pyx_v_mslice; + goto __pyx_L0; + } + + /* "View.MemoryView":1052 + * + * @cname('__pyx_memoryview_get_slice_from_memoryview') + * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *mslice) except NULL: + * cdef _memoryviewslice obj + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_obj); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + +static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { + int __pyx_v_dim; + Py_ssize_t *__pyx_v_shape; + Py_ssize_t *__pyx_v_strides; + Py_ssize_t *__pyx_v_suboffsets; + __Pyx_RefNannyDeclarations + Py_ssize_t *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + __Pyx_RefNannySetupContext("slice_copy", 0); + + /* "View.MemoryView":1067 + * cdef (Py_ssize_t*) shape, strides, suboffsets + * + * shape = memview.view.shape # <<<<<<<<<<<<<< + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets + */ + __pyx_t_1 = __pyx_v_memview->view.shape; + __pyx_v_shape = __pyx_t_1; + + /* "View.MemoryView":1068 + * + * shape = memview.view.shape + * strides = memview.view.strides # <<<<<<<<<<<<<< + * suboffsets = memview.view.suboffsets + * + */ + __pyx_t_1 = __pyx_v_memview->view.strides; + __pyx_v_strides = __pyx_t_1; + + /* "View.MemoryView":1069 + * shape = memview.view.shape + * strides = memview.view.strides + * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< + * + * dst.memview = <__pyx_memoryview *> memview + */ + __pyx_t_1 = __pyx_v_memview->view.suboffsets; + __pyx_v_suboffsets = __pyx_t_1; + + /* "View.MemoryView":1071 + * suboffsets = memview.view.suboffsets + * + * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< + * dst.data = memview.view.buf + * + */ + __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); + + /* "View.MemoryView":1072 + * + * dst.memview = <__pyx_memoryview *> memview + * dst.data = memview.view.buf # <<<<<<<<<<<<<< + * + * for dim in range(memview.view.ndim): + */ + __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); + + /* "View.MemoryView":1074 + * dst.data = memview.view.buf + * + * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + */ + __pyx_t_2 = __pyx_v_memview->view.ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_dim = __pyx_t_4; + + /* "View.MemoryView":1075 + * + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + */ + (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); + + /* "View.MemoryView":1076 + * for dim in range(memview.view.ndim): + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 + * + */ + (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); + + /* "View.MemoryView":1077 + * dst.shape[dim] = shape[dim] + * dst.strides[dim] = strides[dim] + * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object') + */ + if ((__pyx_v_suboffsets != 0)) { + __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]); + } else { + __pyx_t_5 = -1L; + } + (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5; + } + + /* "View.MemoryView":1063 + * + * @cname('__pyx_memoryview_slice_copy') + * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< + * cdef int dim + * cdef (Py_ssize_t*) shape, strides, suboffsets + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + +static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { + __Pyx_memviewslice __pyx_v_memviewslice; + 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("memoryview_copy", 0); + + /* "View.MemoryView":1083 + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< + * return memoryview_copy_from_slice(memview, &memviewslice) + * + */ + __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); + + /* "View.MemoryView":1084 + * cdef __Pyx_memviewslice memviewslice + * slice_copy(memview, &memviewslice) + * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_object_from_slice') + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1080 + * + * @cname('__pyx_memoryview_copy_object') + * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< + * "Create a new memoryview object" + * cdef __Pyx_memviewslice memviewslice + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + +static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { + PyObject *(*__pyx_v_to_object_func)(char *); + int (*__pyx_v_to_dtype_func)(char *, PyObject *); + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *(*__pyx_t_3)(char *); + int (*__pyx_t_4)(char *, PyObject *); + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1095 + * + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + */ + __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; + __pyx_v_to_object_func = __pyx_t_3; + + /* "View.MemoryView":1096 + * if isinstance(memview, _memoryviewslice): + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< + * else: + * to_object_func = NULL + */ + __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; + __pyx_v_to_dtype_func = __pyx_t_4; + + /* "View.MemoryView":1094 + * cdef int (*to_dtype_func)(char *, object) except 0 + * + * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< + * to_object_func = (<_memoryviewslice> memview).to_object_func + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1098 + * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func + * else: + * to_object_func = NULL # <<<<<<<<<<<<<< + * to_dtype_func = NULL + * + */ + /*else*/ { + __pyx_v_to_object_func = NULL; + + /* "View.MemoryView":1099 + * else: + * to_object_func = NULL + * to_dtype_func = NULL # <<<<<<<<<<<<<< + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + */ + __pyx_v_to_dtype_func = NULL; + } + __pyx_L3:; + + /* "View.MemoryView":1101 + * to_dtype_func = NULL + * + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< + * to_object_func, to_dtype_func, + * memview.dtype_is_object) + */ + __Pyx_XDECREF(__pyx_r); + + /* "View.MemoryView":1103 + * return memoryview_fromslice(memviewslice[0], memview.view.ndim, + * to_object_func, to_dtype_func, + * memview.dtype_is_object) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "View.MemoryView":1087 + * + * @cname('__pyx_memoryview_copy_object_from_slice') + * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< + * """ + * Create a new memoryview object from a given memoryview object and slice. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + +static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { + Py_ssize_t __pyx_r; + int __pyx_t_1; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + __pyx_t_1 = ((__pyx_v_arg < 0) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1111 + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: + * return -arg # <<<<<<<<<<<<<< + * else: + * return arg + */ + __pyx_r = (-__pyx_v_arg); + goto __pyx_L0; + + /* "View.MemoryView":1110 + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: + * if arg < 0: # <<<<<<<<<<<<<< + * return -arg + * else: + */ + } + + /* "View.MemoryView":1113 + * return -arg + * else: + * return arg # <<<<<<<<<<<<<< + * + * @cname('__pyx_get_best_slice_order') + */ + /*else*/ { + __pyx_r = __pyx_v_arg; + goto __pyx_L0; + } + + /* "View.MemoryView":1109 + * + * + * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< + * if arg < 0: + * return -arg + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + +static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { + int __pyx_v_i; + Py_ssize_t __pyx_v_c_stride; + Py_ssize_t __pyx_v_f_stride; + char __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1121 + * """ + * cdef int i + * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< + * cdef Py_ssize_t f_stride = 0 + * + */ + __pyx_v_c_stride = 0; + + /* "View.MemoryView":1122 + * cdef int i + * cdef Py_ssize_t c_stride = 0 + * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_f_stride = 0; + + /* "View.MemoryView":1124 + * cdef Py_ssize_t f_stride = 0 + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1126 + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1127 + * if mslice.shape[i] > 1: + * c_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + goto __pyx_L4_break; + + /* "View.MemoryView":1125 + * + * for i in range(ndim - 1, -1, -1): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * c_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L4_break:; + + /* "View.MemoryView":1129 + * break + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + */ + __pyx_t_1 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_1; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1131 + * for i in range(ndim): + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1132 + * if mslice.shape[i] > 1: + * f_stride = mslice.strides[i] + * break # <<<<<<<<<<<<<< + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + */ + goto __pyx_L7_break; + + /* "View.MemoryView":1130 + * + * for i in range(ndim): + * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< + * f_stride = mslice.strides[i] + * break + */ + } + } + __pyx_L7_break:; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1135 + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): + * return 'C' # <<<<<<<<<<<<<< + * else: + * return 'F' + */ + __pyx_r = 'C'; + goto __pyx_L0; + + /* "View.MemoryView":1134 + * break + * + * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< + * return 'C' + * else: + */ + } + + /* "View.MemoryView":1137 + * return 'C' + * else: + * return 'F' # <<<<<<<<<<<<<< + * + * @cython.cdivision(True) + */ + /*else*/ { + __pyx_r = 'F'; + goto __pyx_L0; + } + + /* "View.MemoryView":1116 + * + * @cname('__pyx_get_best_slice_order') + * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< + * """ + * Figure out the best memory access order for a given slice. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + +static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; + Py_ssize_t __pyx_v_dst_extent; + Py_ssize_t __pyx_v_src_stride; + Py_ssize_t __pyx_v_dst_stride; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + + /* "View.MemoryView":1147 + * + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + */ + __pyx_v_src_extent = (__pyx_v_src_shape[0]); + + /* "View.MemoryView":1148 + * cdef Py_ssize_t i + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] + */ + __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); + + /* "View.MemoryView":1149 + * cdef Py_ssize_t src_extent = src_shape[0] + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + */ + __pyx_v_src_stride = (__pyx_v_src_strides[0]); + + /* "View.MemoryView":1150 + * cdef Py_ssize_t dst_extent = dst_shape[0] + * cdef Py_ssize_t src_stride = src_strides[0] + * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + + /* "View.MemoryView":1154 + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + */ + __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); + if (__pyx_t_2) { + __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); + } + __pyx_t_3 = (__pyx_t_2 != 0); + __pyx_t_1 = __pyx_t_3; + __pyx_L5_bool_binop_done:; + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + if (__pyx_t_1) { + + /* "View.MemoryView":1155 + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent))); + + /* "View.MemoryView":1153 + * + * if ndim == 1: + * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< + * src_stride == itemsize == dst_stride): + * memcpy(dst_data, src_data, itemsize * dst_extent) + */ + goto __pyx_L4; + } + + /* "View.MemoryView":1157 + * memcpy(dst_data, src_data, itemsize * dst_extent) + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __pyx_t_5 = __pyx_t_4; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1158 + * else: + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< + * src_data += src_stride + * dst_data += dst_stride + */ + (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize)); + + /* "View.MemoryView":1159 + * for i in range(dst_extent): + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * else: + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1160 + * memcpy(dst_data, src_data, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * else: + * for i in range(dst_extent): + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L4:; + + /* "View.MemoryView":1152 + * cdef Py_ssize_t dst_stride = dst_strides[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * if (src_stride > 0 and dst_stride > 0 and + * src_stride == itemsize == dst_stride): + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1162 + * dst_data += dst_stride + * else: + * for i in range(dst_extent): # <<<<<<<<<<<<<< + * _copy_strided_to_strided(src_data, src_strides + 1, + * dst_data, dst_strides + 1, + */ + /*else*/ { + __pyx_t_4 = __pyx_v_dst_extent; + __pyx_t_5 = __pyx_t_4; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1163 + * else: + * for i in range(dst_extent): + * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< + * dst_data, dst_strides + 1, + * src_shape + 1, dst_shape + 1, + */ + _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); + + /* "View.MemoryView":1167 + * src_shape + 1, dst_shape + 1, + * ndim - 1, itemsize) + * src_data += src_stride # <<<<<<<<<<<<<< + * dst_data += dst_stride + * + */ + __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); + + /* "View.MemoryView":1168 + * ndim - 1, itemsize) + * src_data += src_stride + * dst_data += dst_stride # <<<<<<<<<<<<<< + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, + */ + __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1140 + * + * @cython.cdivision(True) + * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< + * char *dst_data, Py_ssize_t *dst_strides, + * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, + */ + + /* function exit code */ +} + +/* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + +static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { + + /* "View.MemoryView":1173 + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< + * src.shape, dst.shape, ndim, itemsize) + * + */ + _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1170 + * dst_data += dst_stride + * + * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *dst, + * int ndim, size_t itemsize) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + +static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { + Py_ssize_t __pyx_v_shape; + Py_ssize_t __pyx_v_size; + Py_ssize_t __pyx_r; + Py_ssize_t __pyx_t_1; + Py_ssize_t *__pyx_t_2; + Py_ssize_t *__pyx_t_3; + Py_ssize_t *__pyx_t_4; + + /* "View.MemoryView":1179 + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<< + * + * for shape in src.shape[:ndim]: + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_size = __pyx_t_1; + + /* "View.MemoryView":1181 + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + * + * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<< + * size *= shape + * + */ + __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim); + for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { + __pyx_t_2 = __pyx_t_4; + __pyx_v_shape = (__pyx_t_2[0]); + + /* "View.MemoryView":1182 + * + * for shape in src.shape[:ndim]: + * size *= shape # <<<<<<<<<<<<<< + * + * return size + */ + __pyx_v_size = (__pyx_v_size * __pyx_v_shape); + } + + /* "View.MemoryView":1184 + * size *= shape + * + * return size # <<<<<<<<<<<<<< + * + * @cname('__pyx_fill_contig_strides_array') + */ + __pyx_r = __pyx_v_size; + goto __pyx_L0; + + /* "View.MemoryView":1177 + * + * @cname('__pyx_memoryview_slice_get_size') + * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< + * "Return the size of the memory occupied by the slice in number of bytes" + * cdef Py_ssize_t shape, size = src.memview.view.itemsize + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + +static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { + int __pyx_v_idx; + Py_ssize_t __pyx_r; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + __pyx_t_1 = ((__pyx_v_order == 'F') != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1197 + * + * if order == 'F': + * for idx in range(ndim): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + __pyx_t_2 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_idx = __pyx_t_4; + + /* "View.MemoryView":1198 + * if order == 'F': + * for idx in range(ndim): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * else: + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1199 + * for idx in range(ndim): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * else: + * for idx in range(ndim - 1, -1, -1): + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + + /* "View.MemoryView":1196 + * cdef int idx + * + * if order == 'F': # <<<<<<<<<<<<<< + * for idx in range(ndim): + * strides[idx] = stride + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1201 + * stride *= shape[idx] + * else: + * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * strides[idx] = stride + * stride *= shape[idx] + */ + /*else*/ { + for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { + __pyx_v_idx = __pyx_t_2; + + /* "View.MemoryView":1202 + * else: + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride # <<<<<<<<<<<<<< + * stride *= shape[idx] + * + */ + (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; + + /* "View.MemoryView":1203 + * for idx in range(ndim - 1, -1, -1): + * strides[idx] = stride + * stride *= shape[idx] # <<<<<<<<<<<<<< + * + * return stride + */ + __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); + } + } + __pyx_L3:; + + /* "View.MemoryView":1205 + * stride *= shape[idx] + * + * return stride # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_data_to_temp') + */ + __pyx_r = __pyx_v_stride; + goto __pyx_L0; + + /* "View.MemoryView":1187 + * + * @cname('__pyx_fill_contig_strides_array') + * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< + * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, + * int ndim, char order) nogil: + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + +static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { + int __pyx_v_i; + void *__pyx_v_result; + size_t __pyx_v_itemsize; + size_t __pyx_v_size; + void *__pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + struct __pyx_memoryview_obj *__pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1219 + * cdef void *result + * + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef size_t size = slice_get_size(src, ndim) + * + */ + __pyx_t_1 = __pyx_v_src->memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1220 + * + * cdef size_t itemsize = src.memview.view.itemsize + * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< + * + * result = malloc(size) + */ + __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); + + /* "View.MemoryView":1222 + * cdef size_t size = slice_get_size(src, ndim) + * + * result = malloc(size) # <<<<<<<<<<<<<< + * if not result: + * _err(MemoryError, NULL) + */ + __pyx_v_result = malloc(__pyx_v_size); + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1224 + * result = malloc(size) + * if not result: + * _err(MemoryError, NULL) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1224, __pyx_L1_error) + + /* "View.MemoryView":1223 + * + * result = malloc(size) + * if not result: # <<<<<<<<<<<<<< + * _err(MemoryError, NULL) + * + */ + } + + /* "View.MemoryView":1227 + * + * + * tmpslice.data = result # <<<<<<<<<<<<<< + * tmpslice.memview = src.memview + * for i in range(ndim): + */ + __pyx_v_tmpslice->data = ((char *)__pyx_v_result); + + /* "View.MemoryView":1228 + * + * tmpslice.data = result + * tmpslice.memview = src.memview # <<<<<<<<<<<<<< + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + */ + __pyx_t_4 = __pyx_v_src->memview; + __pyx_v_tmpslice->memview = __pyx_t_4; + + /* "View.MemoryView":1229 + * tmpslice.data = result + * tmpslice.memview = src.memview + * for i in range(ndim): # <<<<<<<<<<<<<< + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1230 + * tmpslice.memview = src.memview + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< + * tmpslice.suboffsets[i] = -1 + * + */ + (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); + + /* "View.MemoryView":1231 + * for i in range(ndim): + * tmpslice.shape[i] = src.shape[i] + * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, + */ + (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1233 + * tmpslice.suboffsets[i] = -1 + * + * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, # <<<<<<<<<<<<<< + * ndim, order) + * + */ + (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order)); + + /* "View.MemoryView":1237 + * + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 + */ + __pyx_t_3 = __pyx_v_ndim; + __pyx_t_5 = __pyx_t_3; + for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { + __pyx_v_i = __pyx_t_6; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1239 + * for i in range(ndim): + * if tmpslice.shape[i] == 1: + * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< + * + * if slice_is_contig(src[0], order, ndim): + */ + (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1238 + * + * for i in range(ndim): + * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< + * tmpslice.strides[i] = 0 + * + */ + } + } + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1242 + * + * if slice_is_contig(src[0], order, ndim): + * memcpy(result, src.data, size) # <<<<<<<<<<<<<< + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + */ + (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size)); + + /* "View.MemoryView":1241 + * tmpslice.strides[i] = 0 + * + * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< + * memcpy(result, src.data, size) + * else: + */ + goto __pyx_L9; + } + + /* "View.MemoryView":1244 + * memcpy(result, src.data, size) + * else: + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< + * + * return result + */ + /*else*/ { + copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); + } + __pyx_L9:; + + /* "View.MemoryView":1246 + * copy_strided_to_strided(src, tmpslice, ndim, itemsize) + * + * return result # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "View.MemoryView":1208 + * + * @cname('__pyx_memoryview_copy_data_to_temp') + * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice *tmpslice, + * char order, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = NULL; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + +static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_extents", 0); + + /* "View.MemoryView":1254 + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + * (i, extent1, extent2)) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err_dim') + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1254, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + + /* "View.MemoryView":1253 + * cdef int _err_extents(int i, Py_ssize_t extent1, + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % # <<<<<<<<<<<<<< + * (i, extent1, extent2)) + * + */ + __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(1, 1253, __pyx_L1_error) + + /* "View.MemoryView":1251 + * + * @cname('__pyx_memoryview_err_extents') + * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< + * Py_ssize_t extent2) except -1 with gil: + * raise ValueError("got differing extents in dimension %d (got %d and %d)" % + */ + + /* 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("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + +static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err_dim", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1258 + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: + * raise error(msg.decode('ascii') % dim) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_err') + */ + __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1258, __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_INCREF(__pyx_v_error); + __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && 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_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1258, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 1258, __pyx_L1_error) + + /* "View.MemoryView":1257 + * + * @cname('__pyx_memoryview_err_dim') + * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii') % dim) + * + */ + + /* 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("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + +static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) { + 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; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("_err", 0); + __Pyx_INCREF(__pyx_v_error); + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + __pyx_t_1 = ((__pyx_v_msg != NULL) != 0); + if (unlikely(__pyx_t_1)) { + + /* "View.MemoryView":1263 + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: + * raise error(msg.decode('ascii')) # <<<<<<<<<<<<<< + * else: + * raise error + */ + __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_error); + __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1263, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(1, 1263, __pyx_L1_error) + + /* "View.MemoryView":1262 + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: + * if msg != NULL: # <<<<<<<<<<<<<< + * raise error(msg.decode('ascii')) + * else: + */ + } + + /* "View.MemoryView":1265 + * raise error(msg.decode('ascii')) + * else: + * raise error # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_copy_contents') + */ + /*else*/ { + __Pyx_Raise(__pyx_v_error, 0, 0, 0); + __PYX_ERR(1, 1265, __pyx_L1_error) + } + + /* "View.MemoryView":1261 + * + * @cname('__pyx_memoryview_err') + * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< + * if msg != NULL: + * raise error(msg.decode('ascii')) + */ + + /* 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("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __Pyx_XDECREF(__pyx_v_error); + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + return __pyx_r; +} + +/* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + +static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { + void *__pyx_v_tmpdata; + size_t __pyx_v_itemsize; + int __pyx_v_i; + char __pyx_v_order; + int __pyx_v_broadcasting; + int __pyx_v_direct_copy; + __Pyx_memviewslice __pyx_v_tmp; + int __pyx_v_ndim; + int __pyx_r; + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + void *__pyx_t_7; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + + /* "View.MemoryView":1276 + * Check for overlapping memory and verify the shapes. + * """ + * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + */ + __pyx_v_tmpdata = NULL; + + /* "View.MemoryView":1277 + * """ + * cdef void *tmpdata = NULL + * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + */ + __pyx_t_1 = __pyx_v_src.memview->view.itemsize; + __pyx_v_itemsize = __pyx_t_1; + + /* "View.MemoryView":1279 + * cdef size_t itemsize = src.memview.view.itemsize + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< + * cdef bint broadcasting = False + * cdef bint direct_copy = False + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); + + /* "View.MemoryView":1280 + * cdef int i + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False # <<<<<<<<<<<<<< + * cdef bint direct_copy = False + * cdef __Pyx_memviewslice tmp + */ + __pyx_v_broadcasting = 0; + + /* "View.MemoryView":1281 + * cdef char order = get_best_order(&src, src_ndim) + * cdef bint broadcasting = False + * cdef bint direct_copy = False # <<<<<<<<<<<<<< + * cdef __Pyx_memviewslice tmp + * + */ + __pyx_v_direct_copy = 0; + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1285 + * + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); + + /* "View.MemoryView":1284 + * cdef __Pyx_memviewslice tmp + * + * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1287 + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: + * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< + * + * cdef int ndim = max(src_ndim, dst_ndim) + */ + __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); + + /* "View.MemoryView":1286 + * if src_ndim < dst_ndim: + * broadcast_leading(&src, src_ndim, dst_ndim) + * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + */ + } + __pyx_L3:; + + /* "View.MemoryView":1289 + * broadcast_leading(&dst, dst_ndim, src_ndim) + * + * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< + * + * for i in range(ndim): + */ + __pyx_t_3 = __pyx_v_dst_ndim; + __pyx_t_4 = __pyx_v_src_ndim; + if (((__pyx_t_3 > __pyx_t_4) != 0)) { + __pyx_t_5 = __pyx_t_3; + } else { + __pyx_t_5 = __pyx_t_4; + } + __pyx_v_ndim = __pyx_t_5; + + /* "View.MemoryView":1291 + * cdef int ndim = max(src_ndim, dst_ndim) + * + * for i in range(ndim): # <<<<<<<<<<<<<< + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + */ + __pyx_t_5 = __pyx_v_ndim; + __pyx_t_3 = __pyx_t_5; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1294 + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: + * broadcasting = True # <<<<<<<<<<<<<< + * src.strides[i] = 0 + * else: + */ + __pyx_v_broadcasting = 1; + + /* "View.MemoryView":1295 + * if src.shape[i] == 1: + * broadcasting = True + * src.strides[i] = 0 # <<<<<<<<<<<<<< + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) + */ + (__pyx_v_src.strides[__pyx_v_i]) = 0; + + /* "View.MemoryView":1293 + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: + * if src.shape[i] == 1: # <<<<<<<<<<<<<< + * broadcasting = True + * src.strides[i] = 0 + */ + goto __pyx_L7; + } + + /* "View.MemoryView":1297 + * src.strides[i] = 0 + * else: + * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< + * + * if src.suboffsets[i] >= 0: + */ + /*else*/ { + __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error) + } + __pyx_L7:; + + /* "View.MemoryView":1292 + * + * for i in range(ndim): + * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< + * if src.shape[i] == 1: + * broadcasting = True + */ + } + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1300 + * + * if src.suboffsets[i] >= 0: + * _err_dim(ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< + * + * if slices_overlap(&src, &dst, ndim, itemsize): + */ + __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1300, __pyx_L1_error) + + /* "View.MemoryView":1299 + * _err_extents(i, dst.shape[i], src.shape[i]) + * + * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + */ + } + } + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1305 + * + * if not slice_is_contig(src, order, ndim): + * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + */ + __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); + + /* "View.MemoryView":1304 + * if slices_overlap(&src, &dst, ndim, itemsize): + * + * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< + * order = get_best_order(&dst, ndim) + * + */ + } + + /* "View.MemoryView":1307 + * order = get_best_order(&dst, ndim) + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< + * src = tmp + * + */ + __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1307, __pyx_L1_error) + __pyx_v_tmpdata = __pyx_t_7; + + /* "View.MemoryView":1308 + * + * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) + * src = tmp # <<<<<<<<<<<<<< + * + * if not broadcasting: + */ + __pyx_v_src = __pyx_v_tmp; + + /* "View.MemoryView":1302 + * _err_dim(ValueError, "Dimension %d is not direct", i) + * + * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< + * + * if not slice_is_contig(src, order, ndim): + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1314 + * + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<< + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim); + + /* "View.MemoryView":1313 + * + * + * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + */ + goto __pyx_L12; + } + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1316 + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): + * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<< + * + * if direct_copy: + */ + __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim); + + /* "View.MemoryView":1315 + * if slice_is_contig(src, 'C', ndim): + * direct_copy = slice_is_contig(dst, 'C', ndim) + * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + */ + } + __pyx_L12:; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_2 = (__pyx_v_direct_copy != 0); + if (__pyx_t_2) { + + /* "View.MemoryView":1320 + * if direct_copy: + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1321 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + */ + (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim))); + + /* "View.MemoryView":1322 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * free(tmpdata) + * return 0 + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1323 + * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1324 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * if order == 'F' == get_best_order(&dst, ndim): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1318 + * direct_copy = slice_is_contig(dst, 'F', ndim) + * + * if direct_copy: # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + } + + /* "View.MemoryView":1310 + * src = tmp + * + * if not broadcasting: # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = (__pyx_v_order == 'F'); + if (__pyx_t_2) { + __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); + } + __pyx_t_8 = (__pyx_t_2 != 0); + if (__pyx_t_8) { + + /* "View.MemoryView":1329 + * + * + * transpose_memslice(&src) # <<<<<<<<<<<<<< + * transpose_memslice(&dst) + * + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1329, __pyx_L1_error) + + /* "View.MemoryView":1330 + * + * transpose_memslice(&src) + * transpose_memslice(&dst) # <<<<<<<<<<<<<< + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + */ + __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1330, __pyx_L1_error) + + /* "View.MemoryView":1326 + * return 0 + * + * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< + * + * + */ + } + + /* "View.MemoryView":1332 + * transpose_memslice(&dst) + * + * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1333 + * + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + */ + copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); + + /* "View.MemoryView":1334 + * refcount_copying(&dst, dtype_is_object, ndim, False) + * copy_strided_to_strided(&src, &dst, ndim, itemsize) + * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * free(tmpdata) + */ + __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1336 + * refcount_copying(&dst, dtype_is_object, ndim, True) + * + * free(tmpdata) # <<<<<<<<<<<<<< + * return 0 + * + */ + free(__pyx_v_tmpdata); + + /* "View.MemoryView":1337 + * + * free(tmpdata) + * return 0 # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_broadcast_leading') + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "View.MemoryView":1268 + * + * @cname('__pyx_memoryview_copy_contents') + * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< + * __Pyx_memviewslice dst, + * int src_ndim, int dst_ndim, + */ + + /* function exit code */ + __pyx_L1_error:; + { + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif + } + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + +static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) { + int __pyx_v_i; + int __pyx_v_offset; + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + + /* "View.MemoryView":1344 + * int ndim_other) nogil: + * cdef int i + * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< + * + * for i in range(ndim - 1, -1, -1): + */ + __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); + + /* "View.MemoryView":1346 + * cdef int offset = ndim_other - ndim + * + * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + */ + for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { + __pyx_v_i = __pyx_t_1; + + /* "View.MemoryView":1347 + * + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<< + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + */ + (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]); + + /* "View.MemoryView":1348 + * for i in range(ndim - 1, -1, -1): + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<< + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + */ + (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]); + + /* "View.MemoryView":1349 + * mslice.shape[i + offset] = mslice.shape[i] + * mslice.strides[i + offset] = mslice.strides[i] + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<< + * + * for i in range(offset): + */ + (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]); + } + + /* "View.MemoryView":1351 + * mslice.suboffsets[i + offset] = mslice.suboffsets[i] + * + * for i in range(offset): # <<<<<<<<<<<<<< + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + */ + __pyx_t_1 = __pyx_v_offset; + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1352 + * + * for i in range(offset): + * mslice.shape[i] = 1 # <<<<<<<<<<<<<< + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 + */ + (__pyx_v_mslice->shape[__pyx_v_i]) = 1; + + /* "View.MemoryView":1353 + * for i in range(offset): + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<< + * mslice.suboffsets[i] = -1 + * + */ + (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]); + + /* "View.MemoryView":1354 + * mslice.shape[i] = 1 + * mslice.strides[i] = mslice.strides[0] + * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< + * + * + */ + (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L; + } + + /* "View.MemoryView":1340 + * + * @cname('__pyx_memoryview_broadcast_leading') + * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< + * int ndim, + * int ndim_other) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + +static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { + int __pyx_t_1; + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + __pyx_t_1 = (__pyx_v_dtype_is_object != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1367 + * + * if dtype_is_object: + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, # <<<<<<<<<<<<<< + * dst.strides, ndim, inc) + * + */ + __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1366 + * + * + * if dtype_is_object: # <<<<<<<<<<<<<< + * refcount_objects_in_slice_with_gil(dst.data, dst.shape, + * dst.strides, ndim, inc) + */ + } + + /* "View.MemoryView":1362 + * + * @cname('__pyx_memoryview_refcount_copying') + * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< + * int ndim, bint inc) nogil: + * + */ + + /* function exit code */ +} + +/* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + +static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + __Pyx_RefNannyDeclarations + #ifdef WITH_THREAD + PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); + #endif + __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); + + /* "View.MemoryView":1374 + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); + + /* "View.MemoryView":1371 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') + * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * bint inc) with gil: + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + #ifdef WITH_THREAD + __Pyx_PyGILState_Release(__pyx_gilstate_save); + #endif +} + +/* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + +static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); + + /* "View.MemoryView":1381 + * cdef Py_ssize_t i + * + * for i in range(shape[0]): # <<<<<<<<<<<<<< + * if ndim == 1: + * if inc: + */ + __pyx_t_1 = (__pyx_v_shape[0]); + __pyx_t_2 = __pyx_t_1; + for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { + __pyx_v_i = __pyx_t_3; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + __pyx_t_4 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + __pyx_t_4 = (__pyx_v_inc != 0); + if (__pyx_t_4) { + + /* "View.MemoryView":1384 + * if ndim == 1: + * if inc: + * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * Py_DECREF(( data)[0]) + */ + Py_INCREF((((PyObject **)__pyx_v_data)[0])); + + /* "View.MemoryView":1383 + * for i in range(shape[0]): + * if ndim == 1: + * if inc: # <<<<<<<<<<<<<< + * Py_INCREF(( data)[0]) + * else: + */ + goto __pyx_L6; + } + + /* "View.MemoryView":1386 + * Py_INCREF(( data)[0]) + * else: + * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + */ + /*else*/ { + Py_DECREF((((PyObject **)__pyx_v_data)[0])); + } + __pyx_L6:; + + /* "View.MemoryView":1382 + * + * for i in range(shape[0]): + * if ndim == 1: # <<<<<<<<<<<<<< + * if inc: + * Py_INCREF(( data)[0]) + */ + goto __pyx_L5; + } + + /* "View.MemoryView":1388 + * Py_DECREF(( data)[0]) + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, inc) + * + */ + /*else*/ { + + /* "View.MemoryView":1389 + * else: + * refcount_objects_in_slice(data, shape + 1, strides + 1, + * ndim - 1, inc) # <<<<<<<<<<<<<< + * + * data += strides[0] + */ + __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); + } + __pyx_L5:; + + /* "View.MemoryView":1391 + * ndim - 1, inc) + * + * data += strides[0] # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0])); + } + + /* "View.MemoryView":1377 + * + * @cname('__pyx_memoryview_refcount_objects_in_slice') + * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, bint inc): + * cdef Py_ssize_t i + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + +static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { + + /* "View.MemoryView":1400 + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); + + /* "View.MemoryView":1401 + * bint dtype_is_object) nogil: + * refcount_copying(dst, dtype_is_object, ndim, False) + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, # <<<<<<<<<<<<<< + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1403 + * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, + * itemsize, item) + * refcount_copying(dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< + * + * + */ + __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); + + /* "View.MemoryView":1397 + * + * @cname('__pyx_memoryview_slice_assign_scalar') + * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< + * size_t itemsize, void *item, + * bint dtype_is_object) nogil: + */ + + /* function exit code */ +} + +/* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + +static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { + CYTHON_UNUSED Py_ssize_t __pyx_v_i; + Py_ssize_t __pyx_v_stride; + Py_ssize_t __pyx_v_extent; + int __pyx_t_1; + Py_ssize_t __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + + /* "View.MemoryView":1411 + * size_t itemsize, void *item) nogil: + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< + * cdef Py_ssize_t extent = shape[0] + * + */ + __pyx_v_stride = (__pyx_v_strides[0]); + + /* "View.MemoryView":1412 + * cdef Py_ssize_t i + * cdef Py_ssize_t stride = strides[0] + * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< + * + * if ndim == 1: + */ + __pyx_v_extent = (__pyx_v_shape[0]); + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); + if (__pyx_t_1) { + + /* "View.MemoryView":1415 + * + * if ndim == 1: + * for i in range(extent): # <<<<<<<<<<<<<< + * memcpy(data, item, itemsize) + * data += stride + */ + __pyx_t_2 = __pyx_v_extent; + __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; + + /* "View.MemoryView":1416 + * if ndim == 1: + * for i in range(extent): + * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< + * data += stride + * else: + */ + (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize)); + + /* "View.MemoryView":1417 + * for i in range(extent): + * memcpy(data, item, itemsize) + * data += stride # <<<<<<<<<<<<<< + * else: + * for i in range(extent): + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + + /* "View.MemoryView":1414 + * cdef Py_ssize_t extent = shape[0] + * + * if ndim == 1: # <<<<<<<<<<<<<< + * for i in range(extent): + * memcpy(data, item, itemsize) + */ + goto __pyx_L3; + } + + /* "View.MemoryView":1419 + * data += stride + * else: + * for i in range(extent): # <<<<<<<<<<<<<< + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + */ + /*else*/ { + __pyx_t_2 = __pyx_v_extent; + __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; + + /* "View.MemoryView":1420 + * else: + * for i in range(extent): + * _slice_assign_scalar(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< + * ndim - 1, itemsize, item) + * data += stride + */ + __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); + + /* "View.MemoryView":1422 + * _slice_assign_scalar(data, shape + 1, strides + 1, + * ndim - 1, itemsize, item) + * data += stride # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_data = (__pyx_v_data + __pyx_v_stride); + } + } + __pyx_L3:; + + /* "View.MemoryView":1407 + * + * @cname('__pyx_memoryview__slice_assign_scalar') + * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< + * Py_ssize_t *strides, int ndim, + * size_t itemsize, void *item) nogil: + */ + + /* function exit code */ +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__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_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +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) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_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; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb068931) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0xb068931: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) + * __pyx_result = Enum.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + */ + __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_Enum(__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_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __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_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[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) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->name); + __Pyx_DECREF(__pyx_v___pyx_result->name); + __pyx_v___pyx_result->name = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[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_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = ((__pyx_t_3 > 1) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< + */ + __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 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + } + } + __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 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_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__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_array __pyx_vtable_array; + +static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_array_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_array_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_array; + p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->_format = ((PyObject*)Py_None); Py_INCREF(Py_None); + if (unlikely(__pyx_array___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_array(PyObject *o) { + struct __pyx_array_obj *p = (struct __pyx_array_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_array___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->mode); + Py_CLEAR(p->_format); + (*Py_TYPE(o)->tp_free)(o); +} +static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_array___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) { + PyObject *v = __Pyx_PyObject_GenericGetAttr(o, n); + if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + v = __pyx_array___getattr__(o, n); + } + return v; +} + +static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(o); +} + +static PyMethodDef __pyx_methods_array[] = { + {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_array[] = { + {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_array = { + __pyx_array___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_array, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_array = { + __pyx_array___len__, /*mp_length*/ + __pyx_array___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_array, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_array = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_array_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_array = { + PyVarObject_HEAD_INIT(0, 0) + "gadget_hdf5.gen_catalogues.array", /*tp_name*/ + sizeof(struct __pyx_array_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_array, /*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*/ + &__pyx_tp_as_sequence_array, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_array, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + __pyx_tp_getattro_array, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_array, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_array, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_array, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_array, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_MemviewEnum_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_MemviewEnum_obj *)o); + p->name = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_Enum(PyObject *o) { + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->name); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + if (p->name) { + e = (*v)(p->name, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_Enum(PyObject *o) { + PyObject* tmp; + struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; + tmp = ((PyObject*)p->name); + p->name = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_Enum[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_MemviewEnum = { + PyVarObject_HEAD_INIT(0, 0) + "gadget_hdf5.gen_catalogues.Enum", /*tp_name*/ + sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_Enum, /*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 + __pyx_MemviewEnum___repr__, /*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*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_Enum, /*tp_traverse*/ + __pyx_tp_clear_Enum, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_Enum, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_MemviewEnum___init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_Enum, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview; + +static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryview_obj *p; + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryview_obj *)o); + p->__pyx_vtab = __pyx_vtabptr_memoryview; + p->obj = Py_None; Py_INCREF(Py_None); + p->_size = Py_None; Py_INCREF(Py_None); + p->_array_interface = Py_None; Py_INCREF(Py_None); + p->view.obj = NULL; + if (unlikely(__pyx_memoryview___cinit__(o, a, k) < 0)) goto bad; + return o; + bad: + Py_DECREF(o); o = 0; + return NULL; +} + +static void __pyx_tp_dealloc_memoryview(PyObject *o) { + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryview___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->obj); + Py_CLEAR(p->_size); + Py_CLEAR(p->_array_interface); + (*Py_TYPE(o)->tp_free)(o); +} + +static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + if (p->obj) { + e = (*v)(p->obj, a); if (e) return e; + } + if (p->_size) { + e = (*v)(p->_size, a); if (e) return e; + } + if (p->_array_interface) { + e = (*v)(p->_array_interface, a); if (e) return e; + } + if (p->view.obj) { + e = (*v)(p->view.obj, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_memoryview(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; + tmp = ((PyObject*)p->obj); + p->obj = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_size); + p->_size = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->_array_interface); + p->_array_interface = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + Py_CLEAR(p->view.obj); + return 0; +} +static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) { + PyObject *r; + PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; + r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); + Py_DECREF(x); + return r; +} + +static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject *v) { + if (v) { + return __pyx_memoryview___setitem__(o, i, v); + } + else { + PyErr_Format(PyExc_NotImplementedError, + "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); + return -1; + } +} + +static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(o); +} + +static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o); +} + +static PyMethodDef __pyx_methods_memoryview[] = { + {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0}, + {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0}, + {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0}, + {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets_memoryview[] = { + {(char *)"T", __pyx_getprop___pyx_memoryview_T, 0, (char *)0, 0}, + {(char *)"base", __pyx_getprop___pyx_memoryview_base, 0, (char *)0, 0}, + {(char *)"shape", __pyx_getprop___pyx_memoryview_shape, 0, (char *)0, 0}, + {(char *)"strides", __pyx_getprop___pyx_memoryview_strides, 0, (char *)0, 0}, + {(char *)"suboffsets", __pyx_getprop___pyx_memoryview_suboffsets, 0, (char *)0, 0}, + {(char *)"ndim", __pyx_getprop___pyx_memoryview_ndim, 0, (char *)0, 0}, + {(char *)"itemsize", __pyx_getprop___pyx_memoryview_itemsize, 0, (char *)0, 0}, + {(char *)"nbytes", __pyx_getprop___pyx_memoryview_nbytes, 0, (char *)0, 0}, + {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PySequenceMethods __pyx_tp_as_sequence_memoryview = { + __pyx_memoryview___len__, /*sq_length*/ + 0, /*sq_concat*/ + 0, /*sq_repeat*/ + __pyx_sq_item_memoryview, /*sq_item*/ + 0, /*sq_slice*/ + 0, /*sq_ass_item*/ + 0, /*sq_ass_slice*/ + 0, /*sq_contains*/ + 0, /*sq_inplace_concat*/ + 0, /*sq_inplace_repeat*/ +}; + +static PyMappingMethods __pyx_tp_as_mapping_memoryview = { + __pyx_memoryview___len__, /*mp_length*/ + __pyx_memoryview___getitem__, /*mp_subscript*/ + __pyx_mp_ass_subscript_memoryview, /*mp_ass_subscript*/ +}; + +static PyBufferProcs __pyx_tp_as_buffer_memoryview = { + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getreadbuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getwritebuffer*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getsegcount*/ + #endif + #if PY_MAJOR_VERSION < 3 + 0, /*bf_getcharbuffer*/ + #endif + __pyx_memoryview_getbuffer, /*bf_getbuffer*/ + 0, /*bf_releasebuffer*/ +}; + +static PyTypeObject __pyx_type___pyx_memoryview = { + PyVarObject_HEAD_INIT(0, 0) + "gadget_hdf5.gen_catalogues.memoryview", /*tp_name*/ + sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_memoryview, /*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 + __pyx_memoryview___repr__, /*tp_repr*/ + 0, /*tp_as_number*/ + &__pyx_tp_as_sequence_memoryview, /*tp_as_sequence*/ + &__pyx_tp_as_mapping_memoryview, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + __pyx_memoryview___str__, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + &__pyx_tp_as_buffer_memoryview, /*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*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_memoryview, /*tp_traverse*/ + __pyx_tp_clear_memoryview, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_memoryview, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_memoryview, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_memoryview, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; +static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice; + +static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) { + struct __pyx_memoryviewslice_obj *p; + PyObject *o = __pyx_tp_new_memoryview(t, a, k); + if (unlikely(!o)) return 0; + p = ((struct __pyx_memoryviewslice_obj *)o); + p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice; + p->from_object = Py_None; Py_INCREF(Py_None); + p->from_slice.memview = NULL; + return o; +} + +static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + PyObject_GC_UnTrack(o); + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_memoryviewslice___dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + Py_CLEAR(p->from_object); + PyObject_GC_Track(o); + __pyx_tp_dealloc_memoryview(o); +} + +static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + e = __pyx_tp_traverse_memoryview(o, v, a); if (e) return e; + if (p->from_object) { + e = (*v)(p->from_object, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear__memoryviewslice(PyObject *o) { + PyObject* tmp; + struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; + __pyx_tp_clear_memoryview(o); + tmp = ((PyObject*)p->from_object); + p->from_object = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + __PYX_XDEC_MEMVIEW(&p->from_slice, 1); + return 0; +} + +static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o); +} + +static PyMethodDef __pyx_methods__memoryviewslice[] = { + {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; + +static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = { + {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0}, + {0, 0, 0, 0, 0} +}; + +static PyTypeObject __pyx_type___pyx_memoryviewslice = { + PyVarObject_HEAD_INIT(0, 0) + "gadget_hdf5.gen_catalogues._memoryviewslice", /*tp_name*/ + sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc__memoryviewslice, /*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 + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___repr__, /*tp_repr*/ + #else + 0, /*tp_repr*/ + #endif + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + #if CYTHON_COMPILING_IN_PYPY + __pyx_memoryview___str__, /*tp_str*/ + #else + 0, /*tp_str*/ + #endif + 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*/ + "Internal class for passing memoryview slices to Python", /*tp_doc*/ + __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/ + __pyx_tp_clear__memoryviewslice, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods__memoryviewslice, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets__memoryviewslice, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new__memoryviewslice, /*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 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif +}; + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_gen_catalogues(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_gen_catalogues}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "gen_catalogues", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 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_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_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0}, + {&__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_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_k_Incompatible_checksums_s_vs_0xb0, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb0), 0, 0, 1, 0}, + {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, + {&__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_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0}, + {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0}, + {&__pyx_n_s_MIN_NUMBER_DM_PTCS, __pyx_k_MIN_NUMBER_DM_PTCS, sizeof(__pyx_k_MIN_NUMBER_DM_PTCS), 0, 0, 1, 1}, + {&__pyx_n_s_MIN_NUMBER_STAR_PTCS, __pyx_k_MIN_NUMBER_STAR_PTCS, sizeof(__pyx_k_MIN_NUMBER_STAR_PTCS), 0, 0, 1, 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_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, + {&__pyx_kp_s_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, 0, 1, 0}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 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_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_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, + {&__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_calcCSHCat, __pyx_k_calcCSHCat, sizeof(__pyx_k_calcCSHCat), 0, 0, 1, 1}, + {&__pyx_n_s_calcCSHIdxs, __pyx_k_calcCSHIdxs, sizeof(__pyx_k_calcCSHIdxs), 0, 0, 1, 1}, + {&__pyx_n_s_calcGxCat, __pyx_k_calcGxCat, sizeof(__pyx_k_calcGxCat), 0, 0, 1, 1}, + {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 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_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_csh_size, __pyx_k_csh_size, sizeof(__pyx_k_csh_size), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 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_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 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_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, + {&__pyx_n_s_fof_dm_size, __pyx_k_fof_dm_size, sizeof(__pyx_k_fof_dm_size), 0, 0, 1, 1}, + {&__pyx_n_s_fof_dm_sizes, __pyx_k_fof_dm_sizes, sizeof(__pyx_k_fof_dm_sizes), 0, 0, 1, 1}, + {&__pyx_n_s_fof_gx_size, __pyx_k_fof_gx_size, sizeof(__pyx_k_fof_gx_size), 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_gadget_hdf5_gen_catalogues, __pyx_k_gadget_hdf5_gen_catalogues, sizeof(__pyx_k_gadget_hdf5_gen_catalogues), 0, 0, 1, 1}, + {&__pyx_kp_s_gadget_hdf5_gen_catalogues_pyx, __pyx_k_gadget_hdf5_gen_catalogues_pyx, sizeof(__pyx_k_gadget_hdf5_gen_catalogues_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0}, + {&__pyx_n_s_group_r200, __pyx_k_group_r200, sizeof(__pyx_k_group_r200), 0, 0, 1, 1}, + {&__pyx_n_s_h_idxs, __pyx_k_h_idxs, sizeof(__pyx_k_h_idxs), 0, 0, 1, 1}, + {&__pyx_n_s_halo_masses, __pyx_k_halo_masses, sizeof(__pyx_k_halo_masses), 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_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_main, __pyx_k_main, sizeof(__pyx_k_main), 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_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, + {&__pyx_n_s_nb_shs, __pyx_k_nb_shs, sizeof(__pyx_k_nb_shs), 0, 0, 1, 1}, + {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 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_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 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_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__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_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_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__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_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_sh_len, __pyx_k_sh_len, sizeof(__pyx_k_sh_len), 0, 0, 1, 1}, + {&__pyx_n_s_sh_len_gx, __pyx_k_sh_len_gx, sizeof(__pyx_k_sh_len_gx), 0, 0, 1, 1}, + {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, + {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, + {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, + {&__pyx_n_s_start_idx, __pyx_k_start_idx, sizeof(__pyx_k_start_idx), 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}, + {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 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_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 133, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 148, __pyx_L1_error) + __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 151, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(1, 180, __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_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(1, 404, __pyx_L1_error) + __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(1, 613, __pyx_L1_error) + __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(1, 832, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "View.MemoryView":133 + * + * if not self.ndim: + * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< + * + * if itemsize <= 0: + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "View.MemoryView":136 + * + * if itemsize <= 0: + * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< + * + * if not isinstance(format, bytes): + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "View.MemoryView":148 + * + * if not self._shape: + * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "View.MemoryView":176 + * self.data = malloc(self.len) + * if not self.data: + * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< + * + * if self.dtype_is_object: + */ + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "View.MemoryView":192 + * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS + * if not (flags & bufmode): + * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< + * info.buf = self.data + * info.len = self.len + */ + __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "View.MemoryView":418 + * def __setitem__(memoryview self, object index, object value): + * if self.view.readonly: + * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< + * + * have_slices, index = _unellipsify(index, self.view.ndim) + */ + __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "View.MemoryView":495 + * result = struct.unpack(self.view.format, bytesitem) + * except struct.error: + * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< + * else: + * if len(self.view.format) == 1: + */ + __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + + /* "View.MemoryView":520 + * def __getbuffer__(self, Py_buffer *info, int flags): + * if flags & PyBUF_WRITABLE and self.view.readonly: + * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< + * + * if flags & PyBUF_ND: + */ + __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); + + /* "View.MemoryView":570 + * if self.view.strides == NULL: + * + * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< + * + * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) + */ + __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(1, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + + /* "View.MemoryView":577 + * def suboffsets(self): + * if self.view.suboffsets == NULL: + * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< + * + * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) + */ + __pyx_tuple__12 = PyTuple_New(1); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(1, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_INCREF(__pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_int_neg_1); + PyTuple_SET_ITEM(__pyx_tuple__12, 0, __pyx_int_neg_1); + __Pyx_GIVEREF(__pyx_tuple__12); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_GIVEREF(__pyx_tuple__13); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); + + /* "View.MemoryView":682 + * if item is Ellipsis: + * if not seen_ellipsis: + * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< + * seen_ellipsis = True + * else: + */ + __pyx_slice__15 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__15)) __PYX_ERR(1, 682, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__15); + __Pyx_GIVEREF(__pyx_slice__15); + + /* "View.MemoryView":703 + * for suboffset in suboffsets[:ndim]: + * if suboffset >= 0: + * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(1, 703, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__16); + __Pyx_GIVEREF(__pyx_tuple__16); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + */ + __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + + /* "(tree fragment)":4 + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< + */ + __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__18); + __Pyx_GIVEREF(__pyx_tuple__18); + + /* "gadget_hdf5/gen_catalogues.pyx":11 + * + * @cython.embedsignature(True) + * def calcCSHIdxs(int[:] h_idxs, int start_idx, int fof_dm_size, int nb_shs, int csh_size, int MIN_NUMBER_DM_PTCS): # <<<<<<<<<<<<<< + * """ Return the indices of the DM particles that belong to the CSH + * + */ + __pyx_tuple__19 = PyTuple_Pack(6, __pyx_n_s_h_idxs, __pyx_n_s_start_idx, __pyx_n_s_fof_dm_size, __pyx_n_s_nb_shs, __pyx_n_s_csh_size, __pyx_n_s_MIN_NUMBER_DM_PTCS); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__19); + __Pyx_GIVEREF(__pyx_tuple__19); + __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_gadget_hdf5_gen_catalogues_pyx, __pyx_n_s_calcCSHIdxs, 11, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 11, __pyx_L1_error) + + /* "gadget_hdf5/gen_catalogues.pyx":32 + * + * @cython.embedsignature(True) + * def calcGxCat(int[:] nb_shs, int[:] sh_len_gx, int[:] fof_gx_size, int MIN_NUMBER_STAR_PTCS): # <<<<<<<<<<<<<< + * """ Construct galaxy catalogue + * + */ + __pyx_tuple__21 = PyTuple_Pack(4, __pyx_n_s_nb_shs, __pyx_n_s_sh_len_gx, __pyx_n_s_fof_gx_size, __pyx_n_s_MIN_NUMBER_STAR_PTCS); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__21); + __Pyx_GIVEREF(__pyx_tuple__21); + __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 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_gadget_hdf5_gen_catalogues_pyx, __pyx_n_s_calcGxCat, 32, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 32, __pyx_L1_error) + + /* "gadget_hdf5/gen_catalogues.pyx":50 + * + * @cython.embedsignature(True) + * def calcCSHCat(int[:] nb_shs, int[:] sh_len, int[:] fof_dm_sizes, float[:] group_r200, float[:] halo_masses, int MIN_NUMBER_DM_PTCS): # <<<<<<<<<<<<<< + * """ Construct central subhalo (CSH) catalogue from FoF/SH info + * + */ + __pyx_tuple__23 = PyTuple_Pack(6, __pyx_n_s_nb_shs, __pyx_n_s_sh_len, __pyx_n_s_fof_dm_sizes, __pyx_n_s_group_r200, __pyx_n_s_halo_masses, __pyx_n_s_MIN_NUMBER_DM_PTCS); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 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_gadget_hdf5_gen_catalogues_pyx, __pyx_n_s_calcCSHCat, 50, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 50, __pyx_L1_error) + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(1, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(1, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__26); + __Pyx_GIVEREF(__pyx_tuple__26); + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(1, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(1, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__28); + __Pyx_GIVEREF(__pyx_tuple__28); + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(1, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__29); + __Pyx_GIVEREF(__pyx_tuple__29); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__30 = 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__30)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__30); + __Pyx_GIVEREF(__pyx_tuple__30); + __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 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_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + /* InitThreads.init */ + #ifdef WITH_THREAD +PyEval_InitThreads(); +#endif + +if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) + + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_184977713 = PyInt_FromLong(184977713L); if (unlikely(!__pyx_int_184977713)) __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:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + generic = Py_None; Py_INCREF(Py_None); + strided = Py_None; Py_INCREF(Py_None); + indirect = Py_None; Py_INCREF(Py_None); + contiguous = Py_None; Py_INCREF(Py_None); + indirect_contiguous = Py_None; Py_INCREF(Py_None); + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __pyx_vtabptr_array = &__pyx_vtable_array; + __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview; + if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_array.tp_print = 0; + #endif + if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 105, __pyx_L1_error) + __pyx_array_type = &__pyx_type___pyx_array; + if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_MemviewEnum.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 279, __pyx_L1_error) + __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum; + __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview; + __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer; + __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice; + __pyx_vtable_memoryview.setitem_slice_assignment = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_slice_assignment; + __pyx_vtable_memoryview.setitem_slice_assign_scalar = (PyObject *(*)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_setitem_slice_assign_scalar; + __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed; + __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object; + __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object; + if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryview.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 330, __pyx_L1_error) + __pyx_memoryview_type = &__pyx_type___pyx_memoryview; + __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice; + __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview; + __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object; + __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object; + __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type; + if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type___pyx_memoryviewslice.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 965, __pyx_L1_error) + __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initgen_catalogues(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initgen_catalogues(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_gen_catalogues(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_gen_catalogues(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_gen_catalogues(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + static PyThread_type_lock __pyx_t_2[8]; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'gen_catalogues' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_gen_catalogues(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("gen_catalogues", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_gadget_hdf5__gen_catalogues) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "gadget_hdf5.gen_catalogues")) { + if (unlikely(PyDict_SetItemString(modules, "gadget_hdf5.gen_catalogues", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "gadget_hdf5/gen_catalogues.pyx":5 + * # -*- coding: utf-8 -*- + * + * import numpy as np # <<<<<<<<<<<<<< + * cimport cython + * cimport openmp + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "gadget_hdf5/gen_catalogues.pyx":11 + * + * @cython.embedsignature(True) + * def calcCSHIdxs(int[:] h_idxs, int start_idx, int fof_dm_size, int nb_shs, int csh_size, int MIN_NUMBER_DM_PTCS): # <<<<<<<<<<<<<< + * """ Return the indices of the DM particles that belong to the CSH + * + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_11gadget_hdf5_14gen_catalogues_1calcCSHIdxs, NULL, __pyx_n_s_gadget_hdf5_gen_catalogues); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_calcCSHIdxs, __pyx_t_1) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "gadget_hdf5/gen_catalogues.pyx":32 + * + * @cython.embedsignature(True) + * def calcGxCat(int[:] nb_shs, int[:] sh_len_gx, int[:] fof_gx_size, int MIN_NUMBER_STAR_PTCS): # <<<<<<<<<<<<<< + * """ Construct galaxy catalogue + * + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_11gadget_hdf5_14gen_catalogues_3calcGxCat, NULL, __pyx_n_s_gadget_hdf5_gen_catalogues); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_calcGxCat, __pyx_t_1) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "gadget_hdf5/gen_catalogues.pyx":50 + * + * @cython.embedsignature(True) + * def calcCSHCat(int[:] nb_shs, int[:] sh_len, int[:] fof_dm_sizes, float[:] group_r200, float[:] halo_masses, int MIN_NUMBER_DM_PTCS): # <<<<<<<<<<<<<< + * """ Construct central subhalo (CSH) catalogue from FoF/SH info + * + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_11gadget_hdf5_14gen_catalogues_5calcCSHCat, NULL, __pyx_n_s_gadget_hdf5_gen_catalogues); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_calcCSHCat, __pyx_t_1) < 0) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "gadget_hdf5/gen_catalogues.pyx":1 + * #cython: language_level=3 # <<<<<<<<<<<<<< + * #!/usr/bin/env python3 + * # -*- coding: utf-8 -*- + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "View.MemoryView":209 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * def __dealloc__(array self): + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 209, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_array_type); + + /* "View.MemoryView":286 + * return self.name + * + * cdef generic = Enum("") # <<<<<<<<<<<<<< + * cdef strided = Enum("") # default + * cdef indirect = Enum("") + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(generic); + __Pyx_DECREF_SET(generic, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":287 + * + * cdef generic = Enum("") + * cdef strided = Enum("") # default # <<<<<<<<<<<<<< + * cdef indirect = Enum("") + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(strided); + __Pyx_DECREF_SET(strided, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":288 + * cdef generic = Enum("") + * cdef strided = Enum("") # default + * cdef indirect = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 288, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(indirect); + __Pyx_DECREF_SET(indirect, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":291 + * + * + * cdef contiguous = Enum("") # <<<<<<<<<<<<<< + * cdef indirect_contiguous = Enum("") + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 291, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(contiguous); + __Pyx_DECREF_SET(contiguous, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":292 + * + * cdef contiguous = Enum("") + * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 292, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XGOTREF(indirect_contiguous); + __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "View.MemoryView":316 + * + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<< + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ + * PyThread_allocate_lock(), + */ + __pyx_memoryview_thread_locks_used = 0; + + /* "View.MemoryView":317 + * DEF THREAD_LOCKS_PREALLOCATED = 8 + * cdef int __pyx_memoryview_thread_locks_used = 0 + * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<< + * PyThread_allocate_lock(), + * PyThread_allocate_lock(), + */ + __pyx_t_2[0] = PyThread_allocate_lock(); + __pyx_t_2[1] = PyThread_allocate_lock(); + __pyx_t_2[2] = PyThread_allocate_lock(); + __pyx_t_2[3] = PyThread_allocate_lock(); + __pyx_t_2[4] = PyThread_allocate_lock(); + __pyx_t_2[5] = PyThread_allocate_lock(); + __pyx_t_2[6] = PyThread_allocate_lock(); + __pyx_t_2[7] = PyThread_allocate_lock(); + memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_2, sizeof(__pyx_memoryview_thread_locks[0]) * (8)); + + /* "View.MemoryView":549 + * info.obj = self + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_memoryview_type); + + /* "View.MemoryView":995 + * return self.from_object + * + * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 995, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 995, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + PyType_Modified(__pyx_memoryviewslice_type); + + /* "(tree fragment)":1 + * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_1) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":11 + * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.name = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init gadget_hdf5.gen_catalogues", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init gadget_hdf5.gen_catalogues"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* 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]; +#ifdef 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 *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 *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) +{ + int first_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) + return; + if (unlikely(__pyx_get_slice_count(memview) < 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + first_time = __pyx_add_acquisition_count(memview) == 0; + if (unlikely(first_time)) { + if (have_gil) { + Py_INCREF((PyObject *) memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_INCREF((PyObject *) memview); + PyGILState_Release(_gilstate); + } + } +} +static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice, + int have_gil, int lineno) { + int last_time; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + memslice->memview = NULL; + return; + } + if (unlikely(__pyx_get_slice_count(memview) <= 0)) + __pyx_fatalerror("Acquisition count is %d (line %d)", + __pyx_get_slice_count(memview), lineno); + last_time = __pyx_sub_acquisition_count(memview) == 1; + memslice->data = NULL; + if (unlikely(last_time)) { + if (have_gil) { + Py_CLEAR(memslice->memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_CLEAR(memslice->memview); + PyGILState_Release(_gilstate); + } + } else { + memslice->memview = NULL; + } +} + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); + return 0; +} + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* None */ +static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { + Py_ssize_t q = a / b; + Py_ssize_t r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (!j) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; + if (likely(m && m->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { + Py_ssize_t l = m->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return m->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { + PyObject *runerr; + Py_ssize_t key_value; + PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; + if (unlikely(!(m && m->sq_item))) { + PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); + return NULL; + } + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { + PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; + if (likely(m && m->mp_subscript)) { + return m->mp_subscript(obj, key); + } + return __Pyx_PyObject_GetIndex(obj, key); +} +#endif + +/* decode_c_string */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_string( + const char* cstring, 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)) { + Py_ssize_t length; + if (unlikely((start < 0) | (stop < 0))) { + size_t slen = strlen(cstring); + if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, + "c-string too long to convert to Python"); + return NULL; + } + length = (Py_ssize_t) slen; + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + 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); + } +} + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; icurexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; + if (unlikely(PyTuple_Check(err))) + return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); +} +#endif + +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r = __Pyx_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* ExtTypeTest */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_type == NULL || exc_info->exc_type == 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 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + #endif + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + 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 + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type, *local_value, *local_tb; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #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 = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + 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 + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 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 + const digit* digits = ((PyLongObject*)op1)->ob_digit; + const Py_ssize_t size = Py_SIZE(op1); + if (likely(__Pyx_sst_abs(size) <= 1)) { + a = likely(size) ? digits[0] : 0; + if (size == -1) a = -a; + } else { + 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; + double a = PyFloat_AS_DOUBLE(op1); + 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 + +/* None */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +} + +/* None */ +static CYTHON_INLINE long __Pyx_div_long(long a, long b) { + long q = a / b; + long r = a - q*b; + q -= ((r != 0) & ((r ^ b) < 0)); + return q; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* 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 (unlikely(!r)) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, attr_name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(attr_name)); +#endif + 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 + +/* SetVTable */ +static int __Pyx_SetVtable(PyObject *dict, void *vtable) { +#if PY_VERSION_HEX >= 0x02070000 + PyObject *ob = PyCapsule_New(vtable, 0, 0); +#else + PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); +#endif + if (!ob) + goto bad; + if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) + goto bad; + Py_DECREF(ob); + return 0; +bad: + Py_XDECREF(ob); + return -1; +} + +/* PyObjectGetAttrStrNoError */ +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +} + +/* SetupReduce */ +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStr(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_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#else + if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#endif +#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 + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#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; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#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_GetAttrStr(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()) + PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + 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); + PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_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 ((0)) {} + view->obj = NULL; + Py_DECREF(obj); +} +#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]; + } + 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); + } + } + *out_start = start; + *out_end = end + itemsize; +} +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); +} + +/* Capsule */ +static CYTHON_INLINE PyObject * +__pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig) +{ + PyObject *cobj; +#if PY_VERSION_HEX >= 0x02070000 + cobj = PyCapsule_New(p, sig, NULL); +#else + cobj = PyCObject_FromVoidPtr(p, NULL); +#endif + return cobj; +} + +/* IsLittleEndian */ +static CYTHON_INLINE int __Pyx_Is_Little_Endian(void) +{ + union { + uint32_t u32; + uint8_t u8[4]; + } S; + S.u32 = 0x01020304; + return S.u8[0] == 4; +} + +/* BufferFormatCheck */ +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + ctx->is_valid_array = 0; + ctx->struct_alignment = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t <= '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} +static int __Pyx_BufFmt_ExpectNumber(const char **ts) { + int number = __Pyx_BufFmt_ParseNumber(ts); + if (number == -1) + PyErr_Format(PyExc_ValueError,\ + "Does not understand character buffer dtype format string ('%c')", **ts); + return number; +} +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case '?': return "'bool'"; + case 'c': return "'char'"; + case 'b': return "'signed char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 's': case 'p': return "a string"; + case 0: return "end"; + default: return "unparseable format string"; + } +} +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +/* These are for computing the padding at the end of the struct to align + on the first member of the struct. This will probably the same as above, + but we don't have any guarantees. + */ +typedef struct { short x; char c; } __Pyx_pad_short; +typedef struct { int x; char c; } __Pyx_pad_int; +typedef struct { long x; char c; } __Pyx_pad_long; +typedef struct { float x; char c; } __Pyx_pad_float; +typedef struct { double x; char c; } __Pyx_pad_double; +typedef struct { long double x; char c; } __Pyx_pad_longdouble; +typedef struct { void *x; char c; } __Pyx_pad_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); + case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); + case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': + return 'H'; + case 'b': case 'h': case 'i': + case 'l': case 'q': case 's': case 'p': + return 'I'; + case '?': case 'B': case 'H': case 'I': case 'L': case 'Q': + return 'U'; + case 'f': case 'd': case 'g': + return (is_complex ? 'C' : 'R'); + case 'O': + return 'O'; + case 'P': + return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset, arraysize = 1; + if (ctx->enc_type == 0) return 0; + if (ctx->head->field->type->arraysize[0]) { + int i, ndim = 0; + if (ctx->enc_type == 's' || ctx->enc_type == 'p') { + ctx->is_valid_array = ctx->head->field->type->ndim == 1; + ndim = 1; + if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %zu", + ctx->head->field->type->arraysize[0], ctx->enc_count); + return -1; + } + } + if (!ctx->is_valid_array) { + PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", + ctx->head->field->type->ndim, ndim); + return -1; + } + for (i = 0; i < ctx->head->field->type->ndim; i++) { + arraysize *= ctx->head->field->type->arraysize[i]; + } + ctx->is_valid_array = 0; + ctx->enc_count = 1; + } + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + if (ctx->struct_alignment == 0) + ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, + ctx->is_complex); + } + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + if ((type->typegroup == 'H' || group == 'H') && type->size == size) { + } else { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + } + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + ctx->fmt_offset += size; + if (arraysize) + ctx->fmt_offset += (arraysize - 1) * size; + --ctx->enc_count; + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} +static PyObject * +__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) +{ + const char *ts = *tsp; + int i = 0, number, ndim; + ++ts; + if (ctx->new_count != 1) { + PyErr_SetString(PyExc_ValueError, + "Cannot handle repeated arrays in format string"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ndim = ctx->head->field->type->ndim; + while (*ts && *ts != ')') { + switch (*ts) { + case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; + default: break; + } + number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) + return PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + if (*ts != ',' && *ts != ')') + return PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + if (*ts == ',') ts++; + i++; + } + if (i != ndim) + return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return NULL; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return Py_None; +} +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case '\r': + case '\n': + ++ts; + break; + case '<': + if (!__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_Is_Little_Endian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + size_t struct_alignment = ctx->struct_alignment; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + ctx->enc_count = 0; + ctx->struct_alignment = 0; + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + if (struct_alignment) ctx->struct_alignment = struct_alignment; + } + break; + case '}': + { + size_t alignment = ctx->struct_alignment; + ++ts; + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + if (alignment && ctx->fmt_offset % alignment) { + ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); + } + } + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } + CYTHON_FALLTHROUGH; + case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': case 'p': + if ((ctx->enc_type == *ts) && (got_Z == ctx->is_complex) && + (ctx->enc_packmode == ctx->new_packmode) && (!ctx->is_valid_array)) { + ctx->enc_count += ctx->new_count; + ctx->new_count = 1; + got_Z = 0; + ++ts; + break; + } + CYTHON_FALLTHROUGH; + case 's': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + case '(': + if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; + } + } + } +} + +/* 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; + } + } + if (a->ndim) { + for (i = 0; i < a->ndim; i++) + if (a->arraysize[i] != b->arraysize[i]) + return 0; + } + 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; + } + } + 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; + } + } + 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; + } + } + return 1; +fail: + return 0; +} +static int +__pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec) +{ + 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; + } + } + 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; + } + } + 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]; + } + } 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]; + } + } + 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 (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_int(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; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_int, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* 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;\ + } + +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_float(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; + } + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_float, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; +} + +/* 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; +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* CIntFromPy */ + static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) { + const char neg_one = (char) ((char) 0 - (char) 1), const_zero = (char) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(char) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (char) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (char) 0; + case 1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0]) + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) { + return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) { + return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) >= 4 * PyLong_SHIFT) { + return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (char) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(char) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (char) 0; + case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(char, digit, +digits[0]) + case -2: + if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(char) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(char) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(char) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(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(char) - 1 > 4 * PyLong_SHIFT) { + return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); + } + } + break; + } +#endif + if (sizeof(char) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + char val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (char) -1; + } + } else { + char val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (char) -1; + val = __Pyx_PyInt_As_char(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to char"); + return (char) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to char"); + return (char) -1; +} + +/* CheckBinaryVersion */ + static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + return PyErr_WarnEx(NULL, message, 1); + } + return 0; +} + +/* InitStrings */ + static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/cosmic_profiles/for_docs/gadget_hdf5/gen_catalogues.so b/cosmic_profiles/for_docs/gadget_hdf5/gen_catalogues.so new file mode 100755 index 0000000000000000000000000000000000000000..5fd40a4e4236f5af30d1be4c8606771e90cd3d27 GIT binary patch literal 1277864 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�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 HR}HzCWSKx!aEYmNFth~O}h-b^{fNbfiL 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