From 7834ac894a844418681ab436ab64b1caca5cb0a1 Mon Sep 17 00:00:00 2001 From: tian jiax <446100073@qq.com> Date: Wed, 3 Jan 2024 16:21:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8F=B6=E9=9D=A2=E7=A7=AF?= =?UTF-8?q?=E6=8C=87=E6=95=B0=E6=A8=A1=E5=9E=8B=E8=AE=AD=E7=BB=83=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tool/LAI/LAIProcess.cp38-win_amd64.pyd | Bin 0 -> 101888 bytes tool/LAI/LAIProcess.pyx | 166 + tool/LAI/build/LAIProcess.c | 11637 ++++++++++++++++ .../build/LAIProcess.cp38-win_amd64.exp | Bin 0 -> 763 bytes .../build/LAIProcess.cp38-win_amd64.lib | Bin 0 -> 2052 bytes .../Release/build/LAIProcess.obj | Bin 0 -> 600245 bytes tool/LAI/setup.py | 45 + .../transforml1a/build/SAR_geo/SAR_GEO.c | 9744 +++++++++++++ .../build/SAR_geo/SAR_GEO.cp38-win_amd64.exp | Bin 0 -> 769 bytes .../build/SAR_geo/SAR_GEO.cp38-win_amd64.lib | Bin 0 -> 2000 bytes .../Release/build/SAR_geo/SAR_GEO.obj | Bin 0 -> 484497 bytes tool/algorithm/xml/AnalysisXml.py | 135 + 12 files changed, 21727 insertions(+) create mode 100644 tool/LAI/LAIProcess.cp38-win_amd64.pyd create mode 100644 tool/LAI/LAIProcess.pyx create mode 100644 tool/LAI/build/LAIProcess.c create mode 100644 tool/LAI/build/temp.win-amd64-3.8/Release/build/LAIProcess.cp38-win_amd64.exp create mode 100644 tool/LAI/build/temp.win-amd64-3.8/Release/build/LAIProcess.cp38-win_amd64.lib create mode 100644 tool/LAI/build/temp.win-amd64-3.8/Release/build/LAIProcess.obj create mode 100644 tool/LAI/setup.py create mode 100644 tool/algorithm/transforml1a/build/SAR_geo/SAR_GEO.c create mode 100644 tool/algorithm/transforml1a/build/temp.win-amd64-3.8/Release/build/SAR_geo/SAR_GEO.cp38-win_amd64.exp create mode 100644 tool/algorithm/transforml1a/build/temp.win-amd64-3.8/Release/build/SAR_geo/SAR_GEO.cp38-win_amd64.lib create mode 100644 tool/algorithm/transforml1a/build/temp.win-amd64-3.8/Release/build/SAR_geo/SAR_GEO.obj create mode 100644 tool/algorithm/xml/AnalysisXml.py diff --git a/tool/LAI/LAIProcess.cp38-win_amd64.pyd b/tool/LAI/LAIProcess.cp38-win_amd64.pyd new file mode 100644 index 0000000000000000000000000000000000000000..bc5375eb3a256dc2e99d56aac327084d2af1e8d4 GIT binary patch literal 101888 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 else np.nan + result[i,j]=temp + j=j+1 + i=i+1 + return result + \ No newline at end of file diff --git a/tool/LAI/build/LAIProcess.c b/tool/LAI/build/LAIProcess.c new file mode 100644 index 00000000..eb1f1439 --- /dev/null +++ b/tool/LAI/build/LAIProcess.c @@ -0,0 +1,11637 @@ +/* Generated by Cython 0.29.24 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "depends": [], + "name": "LAIProcess", + "sources": [ + "./LAIProcess.pyx" + ] + }, + "module_name": "LAIProcess" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* 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_24" +#define CYTHON_HEX_VERSION 0x001D18F0 +#define CYTHON_FUTURE_DIVISION 0 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if defined(PyUnicode_IS_READY) + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #else + #define __Pyx_PyUnicode_READY(op) (0) + #endif + #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) + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #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__LAIProcess +#define __PYX_HAVE_API__LAIProcess +/* Early includes */ +#include +#include +#include "numpy/arrayobject.h" +#include "numpy/ndarrayobject.h" +#include "numpy/ndarraytypes.h" +#include "numpy/arrayscalars.h" +#include "numpy/ufuncobject.h" + + /* NumPy API declarations from "numpy/__init__.pxd" */ + +#include +#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[] = { + "LAIProcess.pyx", + "__init__.pxd", + "type.pxd", +}; +/* 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; + + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":690 + * # in Cython to enable them only on the right systems. + * + * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + */ +typedef npy_int8 __pyx_t_5numpy_int8_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":691 + * + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t + */ +typedef npy_int16 __pyx_t_5numpy_int16_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":692 + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< + * ctypedef npy_int64 int64_t + * #ctypedef npy_int96 int96_t + */ +typedef npy_int32 __pyx_t_5numpy_int32_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":693 + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< + * #ctypedef npy_int96 int96_t + * #ctypedef npy_int128 int128_t + */ +typedef npy_int64 __pyx_t_5numpy_int64_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":697 + * #ctypedef npy_int128 int128_t + * + * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + */ +typedef npy_uint8 __pyx_t_5numpy_uint8_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":698 + * + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t + */ +typedef npy_uint16 __pyx_t_5numpy_uint16_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":699 + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< + * ctypedef npy_uint64 uint64_t + * #ctypedef npy_uint96 uint96_t + */ +typedef npy_uint32 __pyx_t_5numpy_uint32_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":700 + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< + * #ctypedef npy_uint96 uint96_t + * #ctypedef npy_uint128 uint128_t + */ +typedef npy_uint64 __pyx_t_5numpy_uint64_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":704 + * #ctypedef npy_uint128 uint128_t + * + * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< + * ctypedef npy_float64 float64_t + * #ctypedef npy_float80 float80_t + */ +typedef npy_float32 __pyx_t_5numpy_float32_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":705 + * + * ctypedef npy_float32 float32_t + * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< + * #ctypedef npy_float80 float80_t + * #ctypedef npy_float128 float128_t + */ +typedef npy_float64 __pyx_t_5numpy_float64_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":714 + * # The int types are mapped a bit surprising -- + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t + */ +typedef npy_long __pyx_t_5numpy_int_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":715 + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong longlong_t + * + */ +typedef npy_longlong __pyx_t_5numpy_long_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":716 + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_ulong uint_t + */ +typedef npy_longlong __pyx_t_5numpy_longlong_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":718 + * ctypedef npy_longlong longlong_t + * + * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t + */ +typedef npy_ulong __pyx_t_5numpy_uint_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":719 + * + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulonglong_t + * + */ +typedef npy_ulonglong __pyx_t_5numpy_ulong_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":720 + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_intp intp_t + */ +typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":722 + * ctypedef npy_ulonglong ulonglong_t + * + * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< + * ctypedef npy_uintp uintp_t + * + */ +typedef npy_intp __pyx_t_5numpy_intp_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":723 + * + * ctypedef npy_intp intp_t + * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< + * + * ctypedef npy_double float_t + */ +typedef npy_uintp __pyx_t_5numpy_uintp_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":725 + * ctypedef npy_uintp uintp_t + * + * ctypedef npy_double float_t # <<<<<<<<<<<<<< + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t + */ +typedef npy_double __pyx_t_5numpy_float_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":726 + * + * ctypedef npy_double float_t + * ctypedef npy_double double_t # <<<<<<<<<<<<<< + * ctypedef npy_longdouble longdouble_t + * + */ +typedef npy_double __pyx_t_5numpy_double_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":727 + * ctypedef npy_double float_t + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cfloat cfloat_t + */ +typedef npy_longdouble __pyx_t_5numpy_longdouble_t; +/* Declarations.proto */ +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< float > __pyx_t_float_complex; + #else + typedef float _Complex __pyx_t_float_complex; + #endif +#else + typedef struct { float real, imag; } __pyx_t_float_complex; +#endif +static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); + +/* 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_10LAIProcess___pyx_scope_struct__train_WMCmodel; +struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel; +struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":729 + * ctypedef npy_longdouble longdouble_t + * + * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t + */ +typedef npy_cfloat __pyx_t_5numpy_cfloat_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":730 + * + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< + * ctypedef npy_clongdouble clongdouble_t + * + */ +typedef npy_cdouble __pyx_t_5numpy_cdouble_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":731 + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cdouble complex_t + */ +typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":733 + * ctypedef npy_clongdouble clongdouble_t + * + * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew1(a): + */ +typedef npy_cdouble __pyx_t_5numpy_complex_t; + +/* "LAIProcess.pyx":42 + * + * + * def train_WMCmodel(lai_water_inc_sigma_list,params_X0,train_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ +struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel { + PyObject_HEAD + PyObject *__pyx_v_lai_water_inc_sigma_list; +}; + + +/* "LAIProcess.pyx":82 + * return h[0] + * + * def test_WMCModel(lai_waiter_inc_sigma_list,param_arr,lai_X0,test_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ +struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel { + PyObject_HEAD + PyObject *__pyx_v_csv_sigma; + PyObject *__pyx_v_param_arr; + PyObject *__pyx_v_sample_inc; + PyObject *__pyx_v_sample_soil; +}; + + +/* "LAIProcess.pyx":130 + * return err + * + * def processs_WMCModel(param_arr,lai_X0,sigma,inc_angle,soil_water): # <<<<<<<<<<<<<< + * + * if(sigma<0 ): + */ +struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel { + PyObject_HEAD + PyObject *__pyx_v_inc_angle; + PyObject *__pyx_v_param_arr; + PyObject *__pyx_v_sigma; + PyObject *__pyx_v_soil_water; +}; + + +/* --- 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); + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* IterFinish.proto */ +static CYTHON_INLINE int __Pyx_IterFinish(void); + +/* UnpackItemEndCheck.proto */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); + +/* 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); + +/* 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 + +/* 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); + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_SubtractCObj(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_SubtractCObj(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceSubtract(op1, op2) : PyNumber_Subtract(op1, op2)) +#endif + +/* None.proto */ +static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname); + +/* 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); + +/* 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 + +/* 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); + +/* 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 + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* 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 + +/* 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); + +/* BufferGetAndValidate.proto */ +#define __Pyx_GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)\ + ((obj == Py_None || obj == NULL) ?\ + (__Pyx_ZeroBuffer(buf), 0) :\ + __Pyx__GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)) +static int __Pyx__GetBufferAndValidate(Py_buffer* buf, PyObject* obj, + __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); +static void __Pyx_ZeroBuffer(Py_buffer* buf); +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); +static Py_ssize_t __Pyx_minusones[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; +static Py_ssize_t __Pyx_zeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + +/* BufferIndexError.proto */ +static void __Pyx_RaiseBufferIndexError(int axis); + +#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) +/* 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 + +/* 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); + +/* 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 + +/* 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 + +/* 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 + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* IncludeStringH.proto */ +#include + +/* 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 + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto +#define __PYX_HAVE_RT_ImportType_proto +enum __Pyx_ImportType_CheckSize { + __Pyx_ImportType_CheckSize_Error = 0, + __Pyx_ImportType_CheckSize_Warn = 1, + __Pyx_ImportType_CheckSize_Ignore = 2 +}; +static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); +#endif + +/* 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); + +/* 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; + +#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 + + +/* GCCDiagnostics.proto */ +#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* 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_float(a, b) ((a)==(b)) + #define __Pyx_c_sum_float(a, b) ((a)+(b)) + #define __Pyx_c_diff_float(a, b) ((a)-(b)) + #define __Pyx_c_prod_float(a, b) ((a)*(b)) + #define __Pyx_c_quot_float(a, b) ((a)/(b)) + #define __Pyx_c_neg_float(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_float(z) ((z)==(float)0) + #define __Pyx_c_conj_float(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_float(z) (::std::abs(z)) + #define __Pyx_c_pow_float(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_float(z) ((z)==0) + #define __Pyx_c_conj_float(z) (conjf(z)) + #if 1 + #define __Pyx_c_abs_float(z) (cabsf(z)) + #define __Pyx_c_pow_float(a, b) (cpowf(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex); + #if 1 + static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex); + #endif +#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 + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + + +/* Module declarations from 'cython' */ + +/* Module declarations from 'cpython.buffer' */ + +/* Module declarations from 'libc.string' */ + +/* Module declarations from 'libc.stdio' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.type' */ +static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; + +/* Module declarations from 'cpython' */ + +/* Module declarations from 'cpython.object' */ + +/* Module declarations from 'cpython.ref' */ + +/* Module declarations from 'cpython.mem' */ + +/* Module declarations from 'numpy' */ + +/* Module declarations from 'numpy' */ +static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; +static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; +static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; +static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; +static PyTypeObject *__pyx_ptype_5numpy_generic = 0; +static PyTypeObject *__pyx_ptype_5numpy_number = 0; +static PyTypeObject *__pyx_ptype_5numpy_integer = 0; +static PyTypeObject *__pyx_ptype_5numpy_signedinteger = 0; +static PyTypeObject *__pyx_ptype_5numpy_unsignedinteger = 0; +static PyTypeObject *__pyx_ptype_5numpy_inexact = 0; +static PyTypeObject *__pyx_ptype_5numpy_floating = 0; +static PyTypeObject *__pyx_ptype_5numpy_complexfloating = 0; +static PyTypeObject *__pyx_ptype_5numpy_flexible = 0; +static PyTypeObject *__pyx_ptype_5numpy_character = 0; +static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; + +/* Module declarations from 'libc.math' */ + +/* Module declarations from 'LAIProcess' */ +static PyTypeObject *__pyx_ptype_10LAIProcess___pyx_scope_struct__train_WMCmodel = 0; +static PyTypeObject *__pyx_ptype_10LAIProcess___pyx_scope_struct_1_test_WMCModel = 0; +static PyTypeObject *__pyx_ptype_10LAIProcess___pyx_scope_struct_2_processs_WMCModel = 0; +static PyArrayObject *__pyx_f_10LAIProcess_process_tiff(PyArrayObject *, PyArrayObject *, PyArrayObject *, PyArrayObject *, double, int __pyx_skip_dispatch); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 }; +#define __Pyx_MODULE_NAME "LAIProcess" +extern int __pyx_module_is_main_LAIProcess; +int __pyx_module_is_main_LAIProcess = 0; + +/* Implementation of 'LAIProcess' */ +static PyObject *__pyx_builtin_ImportError; +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_D[] = "D"; +static const char __pyx_k_M[] = "M"; +static const char __pyx_k_N[] = "N"; +static const char __pyx_k_X[] = "X"; +static const char __pyx_k_f[] = "f"; +static const char __pyx_k_h[] = "h"; +static const char __pyx_k_X0[] = "X0"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_FVC[] = "FVC"; +static const char __pyx_k_cos[] = "cos"; +static const char __pyx_k_dpi[] = "dpi"; +static const char __pyx_k_eqs[] = "eqs"; +static const char __pyx_k_err[] = "err"; +static const char __pyx_k_exp[] = "exp"; +static const char __pyx_k_lai[] = "lai"; +static const char __pyx_k_nan[] = "nan"; +static const char __pyx_k_plt[] = "plt"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_show[] = "show"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_V_lai[] = "V_lai"; +static const char __pyx_k_err_f[] = "err_f"; +static const char __pyx_k_f_veg[] = "f_veg"; +static const char __pyx_k_mylog[] = "mylog"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_sigma[] = "sigma"; +static const char __pyx_k_title[] = "title"; +static const char __pyx_k_x_arr[] = "x_arr"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_lai_X0[] = "lai_X0"; +static const char __pyx_k_logger[] = "logger"; +static const char __pyx_k_pyplot[] = "pyplot"; +static const char __pyx_k_random[] = "random"; +static const char __pyx_k_result[] = "result"; +static const char __pyx_k_err_lai[] = "err_lai"; +static const char __pyx_k_leastsq[] = "leastsq"; +static const char __pyx_k_logging[] = "logging"; +static const char __pyx_k_savefig[] = "savefig"; +static const char __pyx_k_scatter[] = "scatter"; +static const char __pyx_k_WMCModel[] = "WMCModel"; +static const char __pyx_k_inc_tiff[] = "inc_tiff"; +static const char __pyx_k_temp_err[] = "temp_err"; +static const char __pyx_k_csv_sigma[] = "csv_sigma"; +static const char __pyx_k_draw_flag[] = "draw_flag"; +static const char __pyx_k_exp_gamma[] = "exp_gamma"; +static const char __pyx_k_getLogger[] = "getLogger"; +static const char __pyx_k_inc_angle[] = "inc_angle"; +static const char __pyx_k_param_arr[] = "param_arr"; +static const char __pyx_k_params_X0[] = "params_X0"; +static const char __pyx_k_sigma_veg[] = "sigma_veg"; +static const char __pyx_k_LAIProcess[] = "LAIProcess"; +static const char __pyx_k_matplotlib[] = "matplotlib"; +static const char __pyx_k_sample_inc[] = "sample_inc"; +static const char __pyx_k_sample_lai[] = "sample_lai"; +static const char __pyx_k_sample_lat[] = "sample_lat"; +static const char __pyx_k_sample_lon[] = "sample_lon"; +static const char __pyx_k_sigma_soil[] = "sigma_soil"; +static const char __pyx_k_sigma_tiff[] = "sigma_tiff"; +static const char __pyx_k_soil_water[] = "soil_water"; +static const char __pyx_k_ImportError[] = "ImportError"; +static const char __pyx_k_sample_code[] = "sample_code"; +static const char __pyx_k_sample_soil[] = "sample_soil"; +static const char __pyx_k_sample_time[] = "sample_time"; +static const char __pyx_k_equation_err[] = "equation-err"; +static const char __pyx_k_sample_sigma[] = "sample_sigma"; +static const char __pyx_k_test_WMCModel[] = "test_WMCModel"; +static const char __pyx_k_LAIProcess_pyx[] = "LAIProcess.pyx"; +static const char __pyx_k_scipy_optimize[] = "scipy.optimize"; +static const char __pyx_k_train_WMCmodel[] = "train_WMCmodel"; +static const char __pyx_k_soil_water_tiff[] = "soil_water_tiff"; +static const char __pyx_k_processs_WMCModel[] = "processs_WMCModel"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_test_err_image_path[] = "test_err_image_path"; +static const char __pyx_k_train_err_image_path[] = "train_err_image_path"; +static const char __pyx_k_test_WMCModel_locals_f[] = "test_WMCModel..f"; +static const char __pyx_k_train_WMCmodel_locals_f[] = "train_WMCmodel..f"; +static const char __pyx_k_lai_water_inc_sigma_item[] = "lai_water_inc_sigma_item"; +static const char __pyx_k_lai_water_inc_sigma_list[] = "lai_water_inc_sigma_list"; +static const char __pyx_k_lai_waiter_inc_sigma_item[] = "lai_waiter_inc_sigma_item"; +static const char __pyx_k_lai_waiter_inc_sigma_list[] = "lai_waiter_inc_sigma_list"; +static const char __pyx_k_processs_WMCModel_locals_f[] = "processs_WMCModel..f"; +static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import"; +static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import"; +static PyObject *__pyx_n_s_A; +static PyObject *__pyx_n_s_B; +static PyObject *__pyx_n_s_C; +static PyObject *__pyx_n_s_D; +static PyObject *__pyx_n_s_FVC; +static PyObject *__pyx_n_s_ImportError; +static PyObject *__pyx_n_s_LAIProcess; +static PyObject *__pyx_kp_s_LAIProcess_pyx; +static PyObject *__pyx_n_s_M; +static PyObject *__pyx_n_s_N; +static PyObject *__pyx_n_s_V_lai; +static PyObject *__pyx_n_s_WMCModel; +static PyObject *__pyx_n_s_X; +static PyObject *__pyx_n_s_X0; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_cos; +static PyObject *__pyx_n_s_csv_sigma; +static PyObject *__pyx_n_s_dpi; +static PyObject *__pyx_n_s_draw_flag; +static PyObject *__pyx_n_s_eqs; +static PyObject *__pyx_kp_s_equation_err; +static PyObject *__pyx_n_s_err; +static PyObject *__pyx_n_s_err_f; +static PyObject *__pyx_n_s_err_lai; +static PyObject *__pyx_n_s_exp; +static PyObject *__pyx_n_s_exp_gamma; +static PyObject *__pyx_n_s_f; +static PyObject *__pyx_n_s_f_veg; +static PyObject *__pyx_n_s_getLogger; +static PyObject *__pyx_n_s_h; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_inc_angle; +static PyObject *__pyx_n_s_inc_tiff; +static PyObject *__pyx_n_s_lai; +static PyObject *__pyx_n_s_lai_X0; +static PyObject *__pyx_n_s_lai_waiter_inc_sigma_item; +static PyObject *__pyx_n_s_lai_waiter_inc_sigma_list; +static PyObject *__pyx_n_s_lai_water_inc_sigma_item; +static PyObject *__pyx_n_s_lai_water_inc_sigma_list; +static PyObject *__pyx_n_s_leastsq; +static PyObject *__pyx_n_s_logger; +static PyObject *__pyx_n_s_logging; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_matplotlib; +static PyObject *__pyx_n_s_mylog; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_nan; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_numpy; +static PyObject *__pyx_kp_s_numpy_core_multiarray_failed_to; +static PyObject *__pyx_kp_s_numpy_core_umath_failed_to_impor; +static PyObject *__pyx_n_s_param_arr; +static PyObject *__pyx_n_s_params_X0; +static PyObject *__pyx_n_s_plt; +static PyObject *__pyx_n_s_processs_WMCModel; +static PyObject *__pyx_n_s_processs_WMCModel_locals_f; +static PyObject *__pyx_n_s_pyplot; +static PyObject *__pyx_n_s_random; +static PyObject *__pyx_n_s_result; +static PyObject *__pyx_n_s_sample_code; +static PyObject *__pyx_n_s_sample_inc; +static PyObject *__pyx_n_s_sample_lai; +static PyObject *__pyx_n_s_sample_lat; +static PyObject *__pyx_n_s_sample_lon; +static PyObject *__pyx_n_s_sample_sigma; +static PyObject *__pyx_n_s_sample_soil; +static PyObject *__pyx_n_s_sample_time; +static PyObject *__pyx_n_s_savefig; +static PyObject *__pyx_n_s_scatter; +static PyObject *__pyx_n_s_scipy_optimize; +static PyObject *__pyx_n_s_show; +static PyObject *__pyx_n_s_sigma; +static PyObject *__pyx_n_s_sigma_soil; +static PyObject *__pyx_n_s_sigma_tiff; +static PyObject *__pyx_n_s_sigma_veg; +static PyObject *__pyx_n_s_soil_water; +static PyObject *__pyx_n_s_soil_water_tiff; +static PyObject *__pyx_n_s_temp_err; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_test_WMCModel; +static PyObject *__pyx_n_s_test_WMCModel_locals_f; +static PyObject *__pyx_n_s_test_err_image_path; +static PyObject *__pyx_n_s_title; +static PyObject *__pyx_n_s_train_WMCmodel; +static PyObject *__pyx_n_s_train_WMCmodel_locals_f; +static PyObject *__pyx_n_s_train_err_image_path; +static PyObject *__pyx_n_s_x_arr; +static PyObject *__pyx_pf_10LAIProcess_WMCModel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_param_arr, PyObject *__pyx_v_sample_lai, PyObject *__pyx_v_sample_soil, PyObject *__pyx_v_sample_inc, PyObject *__pyx_v_sample_sigma); /* proto */ +static PyObject *__pyx_pf_10LAIProcess_14train_WMCmodel_f(PyObject *__pyx_self, PyObject *__pyx_v_X); /* proto */ +static PyObject *__pyx_pf_10LAIProcess_2train_WMCmodel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_lai_water_inc_sigma_list, PyObject *__pyx_v_params_X0, PyObject *__pyx_v_train_err_image_path, PyObject *__pyx_v_draw_flag); /* proto */ +static PyObject *__pyx_pf_10LAIProcess_13test_WMCModel_f(PyObject *__pyx_self, PyObject *__pyx_v_X); /* proto */ +static PyObject *__pyx_pf_10LAIProcess_4test_WMCModel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_lai_waiter_inc_sigma_list, PyObject *__pyx_v_param_arr, PyObject *__pyx_v_lai_X0, PyObject *__pyx_v_test_err_image_path, PyObject *__pyx_v_draw_flag); /* proto */ +static PyObject *__pyx_pf_10LAIProcess_17processs_WMCModel_f(PyObject *__pyx_self, PyObject *__pyx_v_X); /* proto */ +static PyObject *__pyx_pf_10LAIProcess_6processs_WMCModel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_param_arr, PyObject *__pyx_v_lai_X0, PyObject *__pyx_v_sigma, PyObject *__pyx_v_inc_angle, PyObject *__pyx_v_soil_water); /* proto */ +static PyObject *__pyx_pf_10LAIProcess_8process_tiff(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_sigma_tiff, PyArrayObject *__pyx_v_inc_tiff, PyArrayObject *__pyx_v_soil_water_tiff, PyArrayObject *__pyx_v_param_arr, double __pyx_v_lai_X0); /* proto */ +static PyObject *__pyx_tp_new_10LAIProcess___pyx_scope_struct__train_WMCmodel(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_10LAIProcess___pyx_scope_struct_1_test_WMCModel(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_10LAIProcess___pyx_scope_struct_2_processs_WMCModel(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_1; +static PyObject *__pyx_int_600; +static PyObject *__pyx_int_neg_2; +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_tuple__8; +static PyObject *__pyx_tuple__9; +static PyObject *__pyx_tuple__10; +static PyObject *__pyx_tuple__12; +static PyObject *__pyx_tuple__14; +static PyObject *__pyx_tuple__16; +static PyObject *__pyx_codeobj__2; +static PyObject *__pyx_codeobj__4; +static PyObject *__pyx_codeobj__6; +static PyObject *__pyx_codeobj__11; +static PyObject *__pyx_codeobj__13; +static PyObject *__pyx_codeobj__15; +static PyObject *__pyx_codeobj__17; +/* Late includes */ + +/* "LAIProcess.pyx":15 + * + * + * def WMCModel(param_arr,sample_lai,sample_soil,sample_inc,sample_sigma): # <<<<<<<<<<<<<< + * """ WMC + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_10LAIProcess_1WMCModel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_10LAIProcess_WMCModel[] = " WMC\346\250\241\345\236\213 \345\242\236\345\212\240 \345\275\222\344\270\200\345\214\226\346\244\215\350\242\253\346\214\207\346\225\260\n\n Args:\n param_arr (np.ndarray): \345\217\202\346\225\260\346\225\260\347\273\204\n sample_lai (double): \345\217\266\351\235\242\347\247\257\346\214\207\346\225\260\n sample_soil (double): \345\234\237\345\243\244\345\220\253\346\260\264\351\207\217\n sample_inc (double): \345\205\245\345\260\204\350\247\222\357\274\210\345\274\247\345\272\246\345\200\274\357\274\211\n sample_sigma (double): \345\220\216\345\220\221\346\225\243\345\260\204\347\263\273\346\225\260\357\274\210\347\272\277\346\200\247\345\200\274\357\274\211\n\n Returns:\n double: \346\226\271\347\250\213\345\200\274\n "; +static PyMethodDef __pyx_mdef_10LAIProcess_1WMCModel = {"WMCModel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10LAIProcess_1WMCModel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_10LAIProcess_WMCModel}; +static PyObject *__pyx_pw_10LAIProcess_1WMCModel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_param_arr = 0; + PyObject *__pyx_v_sample_lai = 0; + PyObject *__pyx_v_sample_soil = 0; + PyObject *__pyx_v_sample_inc = 0; + PyObject *__pyx_v_sample_sigma = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("WMCModel (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_param_arr,&__pyx_n_s_sample_lai,&__pyx_n_s_sample_soil,&__pyx_n_s_sample_inc,&__pyx_n_s_sample_sigma,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_param_arr)) != 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_sample_lai)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("WMCModel", 1, 5, 5, 1); __PYX_ERR(0, 15, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sample_soil)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("WMCModel", 1, 5, 5, 2); __PYX_ERR(0, 15, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sample_inc)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("WMCModel", 1, 5, 5, 3); __PYX_ERR(0, 15, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sample_sigma)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("WMCModel", 1, 5, 5, 4); __PYX_ERR(0, 15, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "WMCModel") < 0)) __PYX_ERR(0, 15, __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_param_arr = values[0]; + __pyx_v_sample_lai = values[1]; + __pyx_v_sample_soil = values[2]; + __pyx_v_sample_inc = values[3]; + __pyx_v_sample_sigma = values[4]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("WMCModel", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 15, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("LAIProcess.WMCModel", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_10LAIProcess_WMCModel(__pyx_self, __pyx_v_param_arr, __pyx_v_sample_lai, __pyx_v_sample_soil, __pyx_v_sample_inc, __pyx_v_sample_sigma); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_10LAIProcess_WMCModel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_param_arr, PyObject *__pyx_v_sample_lai, PyObject *__pyx_v_sample_soil, PyObject *__pyx_v_sample_inc, PyObject *__pyx_v_sample_sigma) { + PyObject *__pyx_v_A = NULL; + PyObject *__pyx_v_B = NULL; + PyObject *__pyx_v_C = NULL; + PyObject *__pyx_v_D = NULL; + PyObject *__pyx_v_M = NULL; + PyObject *__pyx_v_N = NULL; + PyObject *__pyx_v_V_lai = NULL; + PyObject *__pyx_v_exp_gamma = NULL; + PyObject *__pyx_v_sigma_soil = NULL; + PyObject *__pyx_v_sigma_veg = NULL; + CYTHON_UNUSED long __pyx_v_f_veg; + 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; + PyObject *(*__pyx_t_8)(PyObject *); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("WMCModel", 0); + + /* "LAIProcess.pyx":29 + * """ + * # + * A,B,C,D,M,N=param_arr # # <<<<<<<<<<<<<< + * V_lai=sample_lai + * #V_lai=E*sample_lai+F + */ + if ((likely(PyTuple_CheckExact(__pyx_v_param_arr))) || (PyList_CheckExact(__pyx_v_param_arr))) { + PyObject* sequence = __pyx_v_param_arr; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 6)) { + if (size > 6) __Pyx_RaiseTooManyValuesError(6); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 29, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 4); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 5); + } else { + __pyx_t_1 = PyList_GET_ITEM(sequence, 0); + __pyx_t_2 = PyList_GET_ITEM(sequence, 1); + __pyx_t_3 = PyList_GET_ITEM(sequence, 2); + __pyx_t_4 = PyList_GET_ITEM(sequence, 3); + __pyx_t_5 = PyList_GET_ITEM(sequence, 4); + __pyx_t_6 = PyList_GET_ITEM(sequence, 5); + } + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + #else + { + Py_ssize_t i; + PyObject** temps[6] = {&__pyx_t_1,&__pyx_t_2,&__pyx_t_3,&__pyx_t_4,&__pyx_t_5,&__pyx_t_6}; + for (i=0; i < 6; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + } else { + Py_ssize_t index = -1; + PyObject** temps[6] = {&__pyx_t_1,&__pyx_t_2,&__pyx_t_3,&__pyx_t_4,&__pyx_t_5,&__pyx_t_6}; + __pyx_t_7 = PyObject_GetIter(__pyx_v_param_arr); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; + for (index=0; index < 6; index++) { + PyObject* item = __pyx_t_8(__pyx_t_7); if (unlikely(!item)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 6) < 0) __PYX_ERR(0, 29, __pyx_L1_error) + __pyx_t_8 = NULL; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L4_unpacking_done; + __pyx_L3_unpacking_failed:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 29, __pyx_L1_error) + __pyx_L4_unpacking_done:; + } + __pyx_v_A = __pyx_t_1; + __pyx_t_1 = 0; + __pyx_v_B = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_C = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_D = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_v_M = __pyx_t_5; + __pyx_t_5 = 0; + __pyx_v_N = __pyx_t_6; + __pyx_t_6 = 0; + + /* "LAIProcess.pyx":30 + * # + * A,B,C,D,M,N=param_arr # + * V_lai=sample_lai # <<<<<<<<<<<<<< + * #V_lai=E*sample_lai+F + * exp_gamma=np.exp(-2*B*((V_lai*D+C))*(1/np.cos(sample_inc))) + */ + __Pyx_INCREF(__pyx_v_sample_lai); + __pyx_v_V_lai = __pyx_v_sample_lai; + + /* "LAIProcess.pyx":32 + * V_lai=sample_lai + * #V_lai=E*sample_lai+F + * exp_gamma=np.exp(-2*B*((V_lai*D+C))*(1/np.cos(sample_inc))) # <<<<<<<<<<<<<< + * sigma_soil=M*sample_soil+N + * sigma_veg=A*((V_lai))*np.cos(sample_inc) + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_exp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyNumber_Multiply(__pyx_int_neg_2, __pyx_v_B); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyNumber_Multiply(__pyx_v_V_lai, __pyx_v_D); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_v_C); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_cos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + } + } + __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v_sample_inc) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_sample_inc); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_int_1, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyNumber_Multiply(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_exp_gamma = __pyx_t_6; + __pyx_t_6 = 0; + + /* "LAIProcess.pyx":33 + * #V_lai=E*sample_lai+F + * exp_gamma=np.exp(-2*B*((V_lai*D+C))*(1/np.cos(sample_inc))) + * sigma_soil=M*sample_soil+N # <<<<<<<<<<<<<< + * sigma_veg=A*((V_lai))*np.cos(sample_inc) + * f_veg=1 + */ + __pyx_t_6 = PyNumber_Multiply(__pyx_v_M, __pyx_v_sample_soil); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyNumber_Add(__pyx_t_6, __pyx_v_N); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_sigma_soil = __pyx_t_4; + __pyx_t_4 = 0; + + /* "LAIProcess.pyx":34 + * exp_gamma=np.exp(-2*B*((V_lai*D+C))*(1/np.cos(sample_inc))) + * sigma_soil=M*sample_soil+N + * sigma_veg=A*((V_lai))*np.cos(sample_inc) # <<<<<<<<<<<<<< + * f_veg=1 + * result=sigma_veg*(1-exp_gamma)+sigma_soil*exp_gamma-sample_sigma + */ + __pyx_t_4 = PyNumber_Multiply(__pyx_v_A, __pyx_v_V_lai); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_cos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + } + } + __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_v_sample_inc) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_sample_inc); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyNumber_Multiply(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_sigma_veg = __pyx_t_1; + __pyx_t_1 = 0; + + /* "LAIProcess.pyx":35 + * sigma_soil=M*sample_soil+N + * sigma_veg=A*((V_lai))*np.cos(sample_inc) + * f_veg=1 # <<<<<<<<<<<<<< + * result=sigma_veg*(1-exp_gamma)+sigma_soil*exp_gamma-sample_sigma + * return result + */ + __pyx_v_f_veg = 1; + + /* "LAIProcess.pyx":36 + * sigma_veg=A*((V_lai))*np.cos(sample_inc) + * f_veg=1 + * result=sigma_veg*(1-exp_gamma)+sigma_soil*exp_gamma-sample_sigma # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_t_1 = __Pyx_PyInt_SubtractCObj(__pyx_int_1, __pyx_v_exp_gamma, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = PyNumber_Multiply(__pyx_v_sigma_veg, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 36, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyNumber_Multiply(__pyx_v_sigma_soil, __pyx_v_exp_gamma); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 36, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyNumber_Subtract(__pyx_t_4, __pyx_v_sample_sigma); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "LAIProcess.pyx":37 + * f_veg=1 + * result=sigma_veg*(1-exp_gamma)+sigma_soil*exp_gamma-sample_sigma + * return result # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L0; + + /* "LAIProcess.pyx":15 + * + * + * def WMCModel(param_arr,sample_lai,sample_soil,sample_inc,sample_sigma): # <<<<<<<<<<<<<< + * """ WMC + * + */ + + /* 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("LAIProcess.WMCModel", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_A); + __Pyx_XDECREF(__pyx_v_B); + __Pyx_XDECREF(__pyx_v_C); + __Pyx_XDECREF(__pyx_v_D); + __Pyx_XDECREF(__pyx_v_M); + __Pyx_XDECREF(__pyx_v_N); + __Pyx_XDECREF(__pyx_v_V_lai); + __Pyx_XDECREF(__pyx_v_exp_gamma); + __Pyx_XDECREF(__pyx_v_sigma_soil); + __Pyx_XDECREF(__pyx_v_sigma_veg); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "LAIProcess.pyx":42 + * + * + * def train_WMCmodel(lai_water_inc_sigma_list,params_X0,train_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_10LAIProcess_3train_WMCmodel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_10LAIProcess_2train_WMCmodel[] = " \350\256\255\347\273\203\346\250\241\345\236\213\345\217\202\346\225\260\n\n Args:\n lai_waiter_inc_sigma_list (list): \350\256\255\347\273\203\346\250\241\345\236\213\344\275\277\347\224\250\347\232\204\346\240\267\346\234\254\345\221\242\n "; +static PyMethodDef __pyx_mdef_10LAIProcess_3train_WMCmodel = {"train_WMCmodel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10LAIProcess_3train_WMCmodel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_10LAIProcess_2train_WMCmodel}; +static PyObject *__pyx_pw_10LAIProcess_3train_WMCmodel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_lai_water_inc_sigma_list = 0; + PyObject *__pyx_v_params_X0 = 0; + PyObject *__pyx_v_train_err_image_path = 0; + PyObject *__pyx_v_draw_flag = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("train_WMCmodel (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lai_water_inc_sigma_list,&__pyx_n_s_params_X0,&__pyx_n_s_train_err_image_path,&__pyx_n_s_draw_flag,0}; + PyObject* values[4] = {0,0,0,0}; + values[3] = ((PyObject *)Py_True); + 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_lai_water_inc_sigma_list)) != 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_params_X0)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("train_WMCmodel", 0, 3, 4, 1); __PYX_ERR(0, 42, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_train_err_image_path)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("train_WMCmodel", 0, 3, 4, 2); __PYX_ERR(0, 42, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_draw_flag); + if (value) { values[3] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "train_WMCmodel") < 0)) __PYX_ERR(0, 42, __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_lai_water_inc_sigma_list = values[0]; + __pyx_v_params_X0 = values[1]; + __pyx_v_train_err_image_path = values[2]; + __pyx_v_draw_flag = values[3]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("train_WMCmodel", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 42, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("LAIProcess.train_WMCmodel", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_10LAIProcess_2train_WMCmodel(__pyx_self, __pyx_v_lai_water_inc_sigma_list, __pyx_v_params_X0, __pyx_v_train_err_image_path, __pyx_v_draw_flag); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "LAIProcess.pyx":48 + * lai_waiter_inc_sigma_list (list): + * """ + * def f(X): # <<<<<<<<<<<<<< + * eqs=[] + * for lai_water_inc_sigma_item in lai_water_inc_sigma_list: + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_10LAIProcess_14train_WMCmodel_1f(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_10LAIProcess_14train_WMCmodel_1f = {"f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10LAIProcess_14train_WMCmodel_1f, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_10LAIProcess_14train_WMCmodel_1f(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_X = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("f (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_X,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_X)) != 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, "f") < 0)) __PYX_ERR(0, 48, __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_X = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("f", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 48, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("LAIProcess.train_WMCmodel.f", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_10LAIProcess_14train_WMCmodel_f(__pyx_self, __pyx_v_X); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_10LAIProcess_14train_WMCmodel_f(PyObject *__pyx_self, PyObject *__pyx_v_X) { + struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *__pyx_cur_scope; + struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *__pyx_outer_scope; + PyObject *__pyx_v_eqs = NULL; + PyObject *__pyx_v_lai_water_inc_sigma_item = NULL; + PyObject *__pyx_v_sample_lai = NULL; + PyObject *__pyx_v_sample_sigma = NULL; + PyObject *__pyx_v_sample_soil = NULL; + PyObject *__pyx_v_sample_inc = NULL; + CYTHON_UNUSED PyObject *__pyx_v_FVC = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + PyObject *(*__pyx_t_3)(PyObject *); + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("f", 0); + __pyx_outer_scope = (struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *) __Pyx_CyFunction_GetClosure(__pyx_self); + __pyx_cur_scope = __pyx_outer_scope; + + /* "LAIProcess.pyx":49 + * """ + * def f(X): + * eqs=[] # <<<<<<<<<<<<<< + * for lai_water_inc_sigma_item in lai_water_inc_sigma_list: + * sample_lai=lai_water_inc_sigma_item[4] + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_eqs = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "LAIProcess.pyx":50 + * def f(X): + * eqs=[] + * for lai_water_inc_sigma_item in lai_water_inc_sigma_list: # <<<<<<<<<<<<<< + * sample_lai=lai_water_inc_sigma_item[4] + * sample_sigma=lai_water_inc_sigma_item[5] # 5: csv_sigma, 8:tiff_sigma + */ + if (unlikely(!__pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list)) { __Pyx_RaiseClosureNameError("lai_water_inc_sigma_list"); __PYX_ERR(0, 50, __pyx_L1_error) } + if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list)) { + __pyx_t_1 = __pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; + __pyx_t_3 = NULL; + } else { + __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_3)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 50, __pyx_L1_error) + #else + __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + } else { + if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 50, __pyx_L1_error) + #else + __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + } + } else { + __pyx_t_4 = __pyx_t_3(__pyx_t_1); + if (unlikely(!__pyx_t_4)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 50, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_4); + } + __Pyx_XDECREF_SET(__pyx_v_lai_water_inc_sigma_item, __pyx_t_4); + __pyx_t_4 = 0; + + /* "LAIProcess.pyx":51 + * eqs=[] + * for lai_water_inc_sigma_item in lai_water_inc_sigma_list: + * sample_lai=lai_water_inc_sigma_item[4] # <<<<<<<<<<<<<< + * sample_sigma=lai_water_inc_sigma_item[5] # 5: csv_sigma, 8:tiff_sigma + * sample_soil=lai_water_inc_sigma_item[6] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_lai_water_inc_sigma_item, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_sample_lai, __pyx_t_4); + __pyx_t_4 = 0; + + /* "LAIProcess.pyx":52 + * for lai_water_inc_sigma_item in lai_water_inc_sigma_list: + * sample_lai=lai_water_inc_sigma_item[4] + * sample_sigma=lai_water_inc_sigma_item[5] # 5: csv_sigma, 8:tiff_sigma # <<<<<<<<<<<<<< + * sample_soil=lai_water_inc_sigma_item[6] + * sample_inc=lai_water_inc_sigma_item[7] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_lai_water_inc_sigma_item, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_sample_sigma, __pyx_t_4); + __pyx_t_4 = 0; + + /* "LAIProcess.pyx":53 + * sample_lai=lai_water_inc_sigma_item[4] + * sample_sigma=lai_water_inc_sigma_item[5] # 5: csv_sigma, 8:tiff_sigma + * sample_soil=lai_water_inc_sigma_item[6] # <<<<<<<<<<<<<< + * sample_inc=lai_water_inc_sigma_item[7] + * FVC=lai_water_inc_sigma_item[8] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_lai_water_inc_sigma_item, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_sample_soil, __pyx_t_4); + __pyx_t_4 = 0; + + /* "LAIProcess.pyx":54 + * sample_sigma=lai_water_inc_sigma_item[5] # 5: csv_sigma, 8:tiff_sigma + * sample_soil=lai_water_inc_sigma_item[6] + * sample_inc=lai_water_inc_sigma_item[7] # <<<<<<<<<<<<<< + * FVC=lai_water_inc_sigma_item[8] + * eqs.append(WMCModel(X,sample_lai,sample_soil,sample_inc,sample_sigma)) + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_lai_water_inc_sigma_item, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_sample_inc, __pyx_t_4); + __pyx_t_4 = 0; + + /* "LAIProcess.pyx":55 + * sample_soil=lai_water_inc_sigma_item[6] + * sample_inc=lai_water_inc_sigma_item[7] + * FVC=lai_water_inc_sigma_item[8] # <<<<<<<<<<<<<< + * eqs.append(WMCModel(X,sample_lai,sample_soil,sample_inc,sample_sigma)) + * return eqs + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_lai_water_inc_sigma_item, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_FVC, __pyx_t_4); + __pyx_t_4 = 0; + + /* "LAIProcess.pyx":56 + * sample_inc=lai_water_inc_sigma_item[7] + * FVC=lai_water_inc_sigma_item[8] + * eqs.append(WMCModel(X,sample_lai,sample_soil,sample_inc,sample_sigma)) # <<<<<<<<<<<<<< + * return eqs + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_WMCModel); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[6] = {__pyx_t_6, __pyx_v_X, __pyx_v_sample_lai, __pyx_v_sample_soil, __pyx_v_sample_inc, __pyx_v_sample_sigma}; + __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_GOTREF(__pyx_t_4); + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { + PyObject *__pyx_temp[6] = {__pyx_t_6, __pyx_v_X, __pyx_v_sample_lai, __pyx_v_sample_soil, __pyx_v_sample_inc, __pyx_v_sample_sigma}; + __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_GOTREF(__pyx_t_4); + } else + #endif + { + __pyx_t_8 = PyTuple_New(5+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (__pyx_t_6) { + __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL; + } + __Pyx_INCREF(__pyx_v_X); + __Pyx_GIVEREF(__pyx_v_X); + PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_v_X); + __Pyx_INCREF(__pyx_v_sample_lai); + __Pyx_GIVEREF(__pyx_v_sample_lai); + PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_sample_lai); + __Pyx_INCREF(__pyx_v_sample_soil); + __Pyx_GIVEREF(__pyx_v_sample_soil); + PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_v_sample_soil); + __Pyx_INCREF(__pyx_v_sample_inc); + __Pyx_GIVEREF(__pyx_v_sample_inc); + PyTuple_SET_ITEM(__pyx_t_8, 3+__pyx_t_7, __pyx_v_sample_inc); + __Pyx_INCREF(__pyx_v_sample_sigma); + __Pyx_GIVEREF(__pyx_v_sample_sigma); + PyTuple_SET_ITEM(__pyx_t_8, 4+__pyx_t_7, __pyx_v_sample_sigma); + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_eqs, __pyx_t_4); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "LAIProcess.pyx":50 + * def f(X): + * eqs=[] + * for lai_water_inc_sigma_item in lai_water_inc_sigma_list: # <<<<<<<<<<<<<< + * sample_lai=lai_water_inc_sigma_item[4] + * sample_sigma=lai_water_inc_sigma_item[5] # 5: csv_sigma, 8:tiff_sigma + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "LAIProcess.pyx":57 + * FVC=lai_water_inc_sigma_item[8] + * eqs.append(WMCModel(X,sample_lai,sample_soil,sample_inc,sample_sigma)) + * return eqs # <<<<<<<<<<<<<< + * + * X0 = params_X0 # + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_eqs); + __pyx_r = __pyx_v_eqs; + goto __pyx_L0; + + /* "LAIProcess.pyx":48 + * lai_waiter_inc_sigma_list (list): + * """ + * def f(X): # <<<<<<<<<<<<<< + * eqs=[] + * for lai_water_inc_sigma_item in lai_water_inc_sigma_list: + */ + + /* function exit code */ + __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_AddTraceback("LAIProcess.train_WMCmodel.f", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_eqs); + __Pyx_XDECREF(__pyx_v_lai_water_inc_sigma_item); + __Pyx_XDECREF(__pyx_v_sample_lai); + __Pyx_XDECREF(__pyx_v_sample_sigma); + __Pyx_XDECREF(__pyx_v_sample_soil); + __Pyx_XDECREF(__pyx_v_sample_inc); + __Pyx_XDECREF(__pyx_v_FVC); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "LAIProcess.pyx":42 + * + * + * def train_WMCmodel(lai_water_inc_sigma_list,params_X0,train_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ + +static PyObject *__pyx_pf_10LAIProcess_2train_WMCmodel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_lai_water_inc_sigma_list, PyObject *__pyx_v_params_X0, PyObject *__pyx_v_train_err_image_path, PyObject *__pyx_v_draw_flag) { + struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *__pyx_cur_scope; + PyObject *__pyx_v_f = 0; + PyObject *__pyx_v_X0 = NULL; + PyObject *__pyx_v_h = NULL; + PyObject *__pyx_v_err_f = NULL; + PyObject *__pyx_v_x_arr = NULL; + PyObject *__pyx_v_plt = NULL; + PyObject *__pyx_v_lai_waiter_inc_sigma_item = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + Py_ssize_t __pyx_t_6; + PyObject *(*__pyx_t_7)(PyObject *); + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("train_WMCmodel", 0); + __pyx_cur_scope = (struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *)__pyx_tp_new_10LAIProcess___pyx_scope_struct__train_WMCmodel(__pyx_ptype_10LAIProcess___pyx_scope_struct__train_WMCmodel, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 42, __pyx_L1_error) + } else { + __Pyx_GOTREF(__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list = __pyx_v_lai_water_inc_sigma_list; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list); + + /* "LAIProcess.pyx":48 + * lai_waiter_inc_sigma_list (list): + * """ + * def f(X): # <<<<<<<<<<<<<< + * eqs=[] + * for lai_water_inc_sigma_item in lai_water_inc_sigma_list: + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_10LAIProcess_14train_WMCmodel_1f, 0, __pyx_n_s_train_WMCmodel_locals_f, ((PyObject*)__pyx_cur_scope), __pyx_n_s_LAIProcess, __pyx_d, ((PyObject *)__pyx_codeobj__2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_f = __pyx_t_1; + __pyx_t_1 = 0; + + /* "LAIProcess.pyx":59 + * return eqs + * + * X0 = params_X0 # # <<<<<<<<<<<<<< + * # logger.info(str(X0)) + * h = leastsq(f, X0) + */ + __Pyx_INCREF(__pyx_v_params_X0); + __pyx_v_X0 = __pyx_v_params_X0; + + /* "LAIProcess.pyx":61 + * X0 = params_X0 # + * # logger.info(str(X0)) + * h = leastsq(f, X0) # <<<<<<<<<<<<<< + * # logger.info(h[0],h[1]) + * err_f=f(h[0]) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_leastsq); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_f, __pyx_v_X0}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_f, __pyx_v_X0}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else + #endif + { + __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (__pyx_t_3) { + __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; + } + __Pyx_INCREF(__pyx_v_f); + __Pyx_GIVEREF(__pyx_v_f); + PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_f); + __Pyx_INCREF(__pyx_v_X0); + __Pyx_GIVEREF(__pyx_v_X0); + PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_X0); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_h = __pyx_t_1; + __pyx_t_1 = 0; + + /* "LAIProcess.pyx":63 + * h = leastsq(f, X0) + * # logger.info(h[0],h[1]) + * err_f=f(h[0]) # <<<<<<<<<<<<<< + * x_arr=[lai_waiter_inc_sigma_item[4] for lai_waiter_inc_sigma_item in lai_water_inc_sigma_list] + * # + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_h, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_pf_10LAIProcess_14train_WMCmodel_f(__pyx_v_f, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_err_f = __pyx_t_2; + __pyx_t_2 = 0; + + /* "LAIProcess.pyx":64 + * # logger.info(h[0],h[1]) + * err_f=f(h[0]) + * x_arr=[lai_waiter_inc_sigma_item[4] for lai_waiter_inc_sigma_item in lai_water_inc_sigma_list] # <<<<<<<<<<<<<< + * # + * # logger.info("\n\n{}\n\t\t ".format(str(np.array(err_f).shape))) + */ + __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list)) { + __pyx_t_1 = __pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0; + __pyx_t_7 = NULL; + } else { + __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_lai_water_inc_sigma_list); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 64, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_7)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 64, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 64, __pyx_L1_error) + #else + __pyx_t_5 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } + } else { + __pyx_t_5 = __pyx_t_7(__pyx_t_1); + if (unlikely(!__pyx_t_5)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 64, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_XDECREF_SET(__pyx_v_lai_waiter_inc_sigma_item, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_lai_waiter_inc_sigma_item, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 64, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_x_arr = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "LAIProcess.pyx":71 + * # logger.info("\n\n") + * + * if draw_flag: # <<<<<<<<<<<<<< + * # logger.info(err_f) + * # logger.info(np.where(np.abs(err_f)<10)) + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_draw_flag); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 71, __pyx_L1_error) + if (__pyx_t_8) { + + /* "LAIProcess.pyx":74 + * # logger.info(err_f) + * # logger.info(np.where(np.abs(err_f)<10)) + * from matplotlib import pyplot as plt # <<<<<<<<<<<<<< + * plt.scatter(x_arr,err_f) + * plt.title("equation-err") + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_pyplot); + __Pyx_GIVEREF(__pyx_n_s_pyplot); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_pyplot); + __pyx_t_1 = __Pyx_Import(__pyx_n_s_matplotlib, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __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_pyplot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v_plt = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "LAIProcess.pyx":75 + * # logger.info(np.where(np.abs(err_f)<10)) + * from matplotlib import pyplot as plt + * plt.scatter(x_arr,err_f) # <<<<<<<<<<<<<< + * plt.title("equation-err") + * plt.savefig(train_err_image_path,dpi=600) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_plt, __pyx_n_s_scatter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = NULL; + __pyx_t_4 = 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_4 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_x_arr, __pyx_v_err_f}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_x_arr, __pyx_v_err_f}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else + #endif + { + __pyx_t_3 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__pyx_t_5) { + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL; + } + __Pyx_INCREF(__pyx_v_x_arr); + __Pyx_GIVEREF(__pyx_v_x_arr); + PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, __pyx_v_x_arr); + __Pyx_INCREF(__pyx_v_err_f); + __Pyx_GIVEREF(__pyx_v_err_f); + PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_v_err_f); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 75, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "LAIProcess.pyx":76 + * from matplotlib import pyplot as plt + * plt.scatter(x_arr,err_f) + * plt.title("equation-err") # <<<<<<<<<<<<<< + * plt.savefig(train_err_image_path,dpi=600) + * plt.show() + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_plt, __pyx_n_s_title); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_s_equation_err) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s_equation_err); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "LAIProcess.pyx":77 + * plt.scatter(x_arr,err_f) + * plt.title("equation-err") + * plt.savefig(train_err_image_path,dpi=600) # <<<<<<<<<<<<<< + * plt.show() + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_plt, __pyx_n_s_savefig); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_train_err_image_path); + __Pyx_GIVEREF(__pyx_v_train_err_image_path); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_train_err_image_path); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dpi, __pyx_int_600) < 0) __PYX_ERR(0, 77, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "LAIProcess.pyx":78 + * plt.title("equation-err") + * plt.savefig(train_err_image_path,dpi=600) + * plt.show() # <<<<<<<<<<<<<< + * + * return h[0] + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_plt, __pyx_n_s_show); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + __pyx_t_5 = (__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_5)) __PYX_ERR(0, 78, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "LAIProcess.pyx":71 + * # logger.info("\n\n") + * + * if draw_flag: # <<<<<<<<<<<<<< + * # logger.info(err_f) + * # logger.info(np.where(np.abs(err_f)<10)) + */ + } + + /* "LAIProcess.pyx":80 + * plt.show() + * + * return h[0] # <<<<<<<<<<<<<< + * + * def test_WMCModel(lai_waiter_inc_sigma_list,param_arr,lai_X0,test_err_image_path,draw_flag=True): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_h, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 80, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "LAIProcess.pyx":42 + * + * + * def train_WMCmodel(lai_water_inc_sigma_list,params_X0,train_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("LAIProcess.train_WMCmodel", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XDECREF(__pyx_v_X0); + __Pyx_XDECREF(__pyx_v_h); + __Pyx_XDECREF(__pyx_v_err_f); + __Pyx_XDECREF(__pyx_v_x_arr); + __Pyx_XDECREF(__pyx_v_plt); + __Pyx_XDECREF(__pyx_v_lai_waiter_inc_sigma_item); + __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "LAIProcess.pyx":82 + * return h[0] + * + * def test_WMCModel(lai_waiter_inc_sigma_list,param_arr,lai_X0,test_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_10LAIProcess_5test_WMCModel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_10LAIProcess_4test_WMCModel[] = " \346\265\213\350\257\225\346\250\241\345\236\213\350\256\255\347\273\203\347\273\223\346\236\234\n\n Args:\n lai_waiter_inc_sigma_list (list): \346\265\213\350\257\225\344\275\277\347\224\250\347\232\204\346\240\267\346\234\254\351\233\206\n A (_type_): \345\217\202\346\225\260A\n B (_type_): \345\217\202\346\225\260B\n C (_type_): \345\217\202\346\225\260C\n D (_type_): \345\217\202\346\225\260D\n M (_type_): \345\217\202\346\225\260M\n N (_type_): \345\217\202\346\225\260N\n lai_X0 (_type_): \345\210\235\345\247\213\345\200\274\n\n Returns:\n list: \350\257\257\345\267\256\345\210\227\350\241\250 [sample_lai,err,predict]\n "; +static PyMethodDef __pyx_mdef_10LAIProcess_5test_WMCModel = {"test_WMCModel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10LAIProcess_5test_WMCModel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_10LAIProcess_4test_WMCModel}; +static PyObject *__pyx_pw_10LAIProcess_5test_WMCModel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_lai_waiter_inc_sigma_list = 0; + PyObject *__pyx_v_param_arr = 0; + PyObject *__pyx_v_lai_X0 = 0; + PyObject *__pyx_v_test_err_image_path = 0; + PyObject *__pyx_v_draw_flag = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("test_WMCModel (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lai_waiter_inc_sigma_list,&__pyx_n_s_param_arr,&__pyx_n_s_lai_X0,&__pyx_n_s_test_err_image_path,&__pyx_n_s_draw_flag,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[4] = ((PyObject *)Py_True); + 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_lai_waiter_inc_sigma_list)) != 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_param_arr)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("test_WMCModel", 0, 4, 5, 1); __PYX_ERR(0, 82, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lai_X0)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("test_WMCModel", 0, 4, 5, 2); __PYX_ERR(0, 82, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_test_err_image_path)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("test_WMCModel", 0, 4, 5, 3); __PYX_ERR(0, 82, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_draw_flag); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "test_WMCModel") < 0)) __PYX_ERR(0, 82, __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); + 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_lai_waiter_inc_sigma_list = values[0]; + __pyx_v_param_arr = values[1]; + __pyx_v_lai_X0 = values[2]; + __pyx_v_test_err_image_path = values[3]; + __pyx_v_draw_flag = values[4]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("test_WMCModel", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 82, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("LAIProcess.test_WMCModel", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_10LAIProcess_4test_WMCModel(__pyx_self, __pyx_v_lai_waiter_inc_sigma_list, __pyx_v_param_arr, __pyx_v_lai_X0, __pyx_v_test_err_image_path, __pyx_v_draw_flag); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "LAIProcess.pyx":104 + * for lai_waiter_inc_sigma_item in lai_waiter_inc_sigma_list: + * sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=lai_waiter_inc_sigma_item + * def f(X): # <<<<<<<<<<<<<< + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,sample_soil,sample_inc,csv_sigma)] + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_10LAIProcess_13test_WMCModel_1f(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_10LAIProcess_13test_WMCModel_1f = {"f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10LAIProcess_13test_WMCModel_1f, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_10LAIProcess_13test_WMCModel_1f(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_X = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("f (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_X,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_X)) != 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, "f") < 0)) __PYX_ERR(0, 104, __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_X = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("f", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 104, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("LAIProcess.test_WMCModel.f", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_10LAIProcess_13test_WMCModel_f(__pyx_self, __pyx_v_X); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_10LAIProcess_13test_WMCModel_f(PyObject *__pyx_self, PyObject *__pyx_v_X) { + struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *__pyx_cur_scope; + struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *__pyx_outer_scope; + PyObject *__pyx_v_lai = NULL; + PyObject *__pyx_v_eqs = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("f", 0); + __pyx_outer_scope = (struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *) __Pyx_CyFunction_GetClosure(__pyx_self); + __pyx_cur_scope = __pyx_outer_scope; + + /* "LAIProcess.pyx":105 + * sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=lai_waiter_inc_sigma_item + * def f(X): + * lai=X[0] # <<<<<<<<<<<<<< + * eqs=[WMCModel(param_arr,lai,sample_soil,sample_inc,csv_sigma)] + * return eqs + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_X, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 105, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_lai = __pyx_t_1; + __pyx_t_1 = 0; + + /* "LAIProcess.pyx":106 + * def f(X): + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,sample_soil,sample_inc,csv_sigma)] # <<<<<<<<<<<<<< + * return eqs + * X0=lai_X0 + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_WMCModel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(!__pyx_cur_scope->__pyx_v_param_arr)) { __Pyx_RaiseClosureNameError("param_arr"); __PYX_ERR(0, 106, __pyx_L1_error) } + if (unlikely(!__pyx_cur_scope->__pyx_v_sample_soil)) { __Pyx_RaiseClosureNameError("sample_soil"); __PYX_ERR(0, 106, __pyx_L1_error) } + if (unlikely(!__pyx_cur_scope->__pyx_v_sample_inc)) { __Pyx_RaiseClosureNameError("sample_inc"); __PYX_ERR(0, 106, __pyx_L1_error) } + if (unlikely(!__pyx_cur_scope->__pyx_v_csv_sigma)) { __Pyx_RaiseClosureNameError("csv_sigma"); __PYX_ERR(0, 106, __pyx_L1_error) } + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_param_arr, __pyx_v_lai, __pyx_cur_scope->__pyx_v_sample_soil, __pyx_cur_scope->__pyx_v_sample_inc, __pyx_cur_scope->__pyx_v_csv_sigma}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_param_arr, __pyx_v_lai, __pyx_cur_scope->__pyx_v_sample_soil, __pyx_cur_scope->__pyx_v_sample_inc, __pyx_cur_scope->__pyx_v_csv_sigma}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else + #endif + { + __pyx_t_5 = PyTuple_New(5+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (__pyx_t_3) { + __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; + } + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_param_arr); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_param_arr); + PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_param_arr); + __Pyx_INCREF(__pyx_v_lai); + __Pyx_GIVEREF(__pyx_v_lai); + PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_lai); + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sample_soil); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_sample_soil); + PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_cur_scope->__pyx_v_sample_soil); + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sample_inc); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_sample_inc); + PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_cur_scope->__pyx_v_sample_inc); + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_csv_sigma); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_csv_sigma); + PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_cur_scope->__pyx_v_csv_sigma); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 106, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_v_eqs = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "LAIProcess.pyx":107 + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,sample_soil,sample_inc,csv_sigma)] + * return eqs # <<<<<<<<<<<<<< + * X0=lai_X0 + * h = leastsq(f, X0) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_eqs); + __pyx_r = __pyx_v_eqs; + goto __pyx_L0; + + /* "LAIProcess.pyx":104 + * for lai_waiter_inc_sigma_item in lai_waiter_inc_sigma_list: + * sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=lai_waiter_inc_sigma_item + * def f(X): # <<<<<<<<<<<<<< + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,sample_soil,sample_inc,csv_sigma)] + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("LAIProcess.test_WMCModel.f", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_lai); + __Pyx_XDECREF(__pyx_v_eqs); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "LAIProcess.pyx":82 + * return h[0] + * + * def test_WMCModel(lai_waiter_inc_sigma_list,param_arr,lai_X0,test_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ + +static PyObject *__pyx_pf_10LAIProcess_4test_WMCModel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_lai_waiter_inc_sigma_list, PyObject *__pyx_v_param_arr, PyObject *__pyx_v_lai_X0, PyObject *__pyx_v_test_err_image_path, PyObject *__pyx_v_draw_flag) { + struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *__pyx_cur_scope; + PyObject *__pyx_v_err = NULL; + PyObject *__pyx_v_err_f = NULL; + PyObject *__pyx_v_x_arr = NULL; + PyObject *__pyx_v_err_lai = NULL; + PyObject *__pyx_v_lai_waiter_inc_sigma_item = NULL; + CYTHON_UNUSED PyObject *__pyx_v_sample_time = NULL; + PyObject *__pyx_v_sample_code = NULL; + CYTHON_UNUSED PyObject *__pyx_v_sample_lon = NULL; + CYTHON_UNUSED PyObject *__pyx_v_sample_lat = NULL; + PyObject *__pyx_v_sample_lai = NULL; + CYTHON_UNUSED PyObject *__pyx_v_sample_sigma = NULL; + PyObject *__pyx_v_f = 0; + PyObject *__pyx_v_X0 = NULL; + PyObject *__pyx_v_h = NULL; + PyObject *__pyx_v_temp_err = NULL; + PyObject *__pyx_v_plt = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + PyObject *(*__pyx_t_3)(PyObject *); + 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)(PyObject *); + int __pyx_t_15; + int __pyx_t_16; + int __pyx_t_17; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("test_WMCModel", 0); + __pyx_cur_scope = (struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *)__pyx_tp_new_10LAIProcess___pyx_scope_struct_1_test_WMCModel(__pyx_ptype_10LAIProcess___pyx_scope_struct_1_test_WMCModel, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 82, __pyx_L1_error) + } else { + __Pyx_GOTREF(__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_param_arr = __pyx_v_param_arr; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_param_arr); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_param_arr); + + /* "LAIProcess.pyx":98 + * list: [sample_lai,err,predict] + * """ + * err=[] # <<<<<<<<<<<<<< + * err_f=[] + * x_arr=[] + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_err = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "LAIProcess.pyx":99 + * """ + * err=[] + * err_f=[] # <<<<<<<<<<<<<< + * x_arr=[] + * err_lai=[] + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_err_f = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "LAIProcess.pyx":100 + * err=[] + * err_f=[] + * x_arr=[] # <<<<<<<<<<<<<< + * err_lai=[] + * for lai_waiter_inc_sigma_item in lai_waiter_inc_sigma_list: + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_x_arr = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "LAIProcess.pyx":101 + * err_f=[] + * x_arr=[] + * err_lai=[] # <<<<<<<<<<<<<< + * for lai_waiter_inc_sigma_item in lai_waiter_inc_sigma_list: + * sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=lai_waiter_inc_sigma_item + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_err_lai = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "LAIProcess.pyx":102 + * x_arr=[] + * err_lai=[] + * for lai_waiter_inc_sigma_item in lai_waiter_inc_sigma_list: # <<<<<<<<<<<<<< + * sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=lai_waiter_inc_sigma_item + * def f(X): + */ + if (likely(PyList_CheckExact(__pyx_v_lai_waiter_inc_sigma_list)) || PyTuple_CheckExact(__pyx_v_lai_waiter_inc_sigma_list)) { + __pyx_t_1 = __pyx_v_lai_waiter_inc_sigma_list; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; + __pyx_t_3 = NULL; + } else { + __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_lai_waiter_inc_sigma_list); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_3)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 102, __pyx_L1_error) + #else + __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + } else { + if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 102, __pyx_L1_error) + #else + __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + } + } else { + __pyx_t_4 = __pyx_t_3(__pyx_t_1); + if (unlikely(!__pyx_t_4)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 102, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_4); + } + __Pyx_XDECREF_SET(__pyx_v_lai_waiter_inc_sigma_item, __pyx_t_4); + __pyx_t_4 = 0; + + /* "LAIProcess.pyx":103 + * err_lai=[] + * for lai_waiter_inc_sigma_item in lai_waiter_inc_sigma_list: + * sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=lai_waiter_inc_sigma_item # <<<<<<<<<<<<<< + * def f(X): + * lai=X[0] + */ + if ((likely(PyTuple_CheckExact(__pyx_v_lai_waiter_inc_sigma_item))) || (PyList_CheckExact(__pyx_v_lai_waiter_inc_sigma_item))) { + PyObject* sequence = __pyx_v_lai_waiter_inc_sigma_item; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 9)) { + if (size > 9) __Pyx_RaiseTooManyValuesError(9); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 103, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 4); + __pyx_t_9 = PyTuple_GET_ITEM(sequence, 5); + __pyx_t_10 = PyTuple_GET_ITEM(sequence, 6); + __pyx_t_11 = PyTuple_GET_ITEM(sequence, 7); + __pyx_t_12 = PyTuple_GET_ITEM(sequence, 8); + } else { + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_5 = PyList_GET_ITEM(sequence, 1); + __pyx_t_6 = PyList_GET_ITEM(sequence, 2); + __pyx_t_7 = PyList_GET_ITEM(sequence, 3); + __pyx_t_8 = PyList_GET_ITEM(sequence, 4); + __pyx_t_9 = PyList_GET_ITEM(sequence, 5); + __pyx_t_10 = PyList_GET_ITEM(sequence, 6); + __pyx_t_11 = PyList_GET_ITEM(sequence, 7); + __pyx_t_12 = PyList_GET_ITEM(sequence, 8); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(__pyx_t_12); + #else + { + Py_ssize_t i; + PyObject** temps[9] = {&__pyx_t_4,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12}; + for (i=0; i < 9; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + } else { + Py_ssize_t index = -1; + PyObject** temps[9] = {&__pyx_t_4,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_10,&__pyx_t_11,&__pyx_t_12}; + __pyx_t_13 = PyObject_GetIter(__pyx_v_lai_waiter_inc_sigma_item); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext; + for (index=0; index < 9; index++) { + PyObject* item = __pyx_t_14(__pyx_t_13); if (unlikely(!item)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 9) < 0) __PYX_ERR(0, 103, __pyx_L1_error) + __pyx_t_14 = NULL; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + goto __pyx_L6_unpacking_done; + __pyx_L5_unpacking_failed:; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_14 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 103, __pyx_L1_error) + __pyx_L6_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_sample_time, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_sample_code, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_XDECREF_SET(__pyx_v_sample_lon, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_XDECREF_SET(__pyx_v_sample_lat, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_XDECREF_SET(__pyx_v_sample_lai, __pyx_t_8); + __pyx_t_8 = 0; + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_csv_sigma); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_csv_sigma, __pyx_t_9); + __Pyx_GIVEREF(__pyx_t_9); + __pyx_t_9 = 0; + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_sample_soil); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_sample_soil, __pyx_t_10); + __Pyx_GIVEREF(__pyx_t_10); + __pyx_t_10 = 0; + __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_sample_inc); + __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_sample_inc, __pyx_t_11); + __Pyx_GIVEREF(__pyx_t_11); + __pyx_t_11 = 0; + __Pyx_XDECREF_SET(__pyx_v_sample_sigma, __pyx_t_12); + __pyx_t_12 = 0; + + /* "LAIProcess.pyx":104 + * for lai_waiter_inc_sigma_item in lai_waiter_inc_sigma_list: + * sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=lai_waiter_inc_sigma_item + * def f(X): # <<<<<<<<<<<<<< + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,sample_soil,sample_inc,csv_sigma)] + */ + __pyx_t_12 = __Pyx_CyFunction_New(&__pyx_mdef_10LAIProcess_13test_WMCModel_1f, 0, __pyx_n_s_test_WMCModel_locals_f, ((PyObject*)__pyx_cur_scope), __pyx_n_s_LAIProcess, __pyx_d, ((PyObject *)__pyx_codeobj__4)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_XDECREF_SET(__pyx_v_f, __pyx_t_12); + __pyx_t_12 = 0; + + /* "LAIProcess.pyx":108 + * eqs=[WMCModel(param_arr,lai,sample_soil,sample_inc,csv_sigma)] + * return eqs + * X0=lai_X0 # <<<<<<<<<<<<<< + * h = leastsq(f, X0) + * temp_err=h[0]-sample_lai + */ + __Pyx_INCREF(__pyx_v_lai_X0); + __Pyx_XDECREF_SET(__pyx_v_X0, __pyx_v_lai_X0); + + /* "LAIProcess.pyx":109 + * return eqs + * X0=lai_X0 + * h = leastsq(f, X0) # <<<<<<<<<<<<<< + * temp_err=h[0]-sample_lai + * err_lai.append(temp_err[0]) # lai + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_leastsq); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_10 = NULL; + __pyx_t_15 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_15 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_11)) { + PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_f, __pyx_v_X0}; + __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_GOTREF(__pyx_t_12); + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) { + PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_f, __pyx_v_X0}; + __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_GOTREF(__pyx_t_12); + } else + #endif + { + __pyx_t_9 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + if (__pyx_t_10) { + __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); __pyx_t_10 = NULL; + } + __Pyx_INCREF(__pyx_v_f); + __Pyx_GIVEREF(__pyx_v_f); + PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_15, __pyx_v_f); + __Pyx_INCREF(__pyx_v_X0); + __Pyx_GIVEREF(__pyx_v_X0); + PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_15, __pyx_v_X0); + __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_9, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF_SET(__pyx_v_h, __pyx_t_12); + __pyx_t_12 = 0; + + /* "LAIProcess.pyx":110 + * X0=lai_X0 + * h = leastsq(f, X0) + * temp_err=h[0]-sample_lai # <<<<<<<<<<<<<< + * err_lai.append(temp_err[0]) # lai + * err.append([sample_lai,temp_err[0],h[0][0],sample_code]) + */ + __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_h, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_11 = PyNumber_Subtract(__pyx_t_12, __pyx_v_sample_lai); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF_SET(__pyx_v_temp_err, __pyx_t_11); + __pyx_t_11 = 0; + + /* "LAIProcess.pyx":111 + * h = leastsq(f, X0) + * temp_err=h[0]-sample_lai + * err_lai.append(temp_err[0]) # lai # <<<<<<<<<<<<<< + * err.append([sample_lai,temp_err[0],h[0][0],sample_code]) + * err_f.append(f(h[0])[0]) # + */ + __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_temp_err, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 111, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_err_lai, __pyx_t_11); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 111, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + + /* "LAIProcess.pyx":112 + * temp_err=h[0]-sample_lai + * err_lai.append(temp_err[0]) # lai + * err.append([sample_lai,temp_err[0],h[0][0],sample_code]) # <<<<<<<<<<<<<< + * err_f.append(f(h[0])[0]) # + * x_arr.append(sample_lai) + */ + __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_temp_err, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_h, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_12, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = PyList_New(4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_v_sample_lai); + __Pyx_GIVEREF(__pyx_v_sample_lai); + PyList_SET_ITEM(__pyx_t_12, 0, __pyx_v_sample_lai); + __Pyx_GIVEREF(__pyx_t_11); + PyList_SET_ITEM(__pyx_t_12, 1, __pyx_t_11); + __Pyx_GIVEREF(__pyx_t_9); + PyList_SET_ITEM(__pyx_t_12, 2, __pyx_t_9); + __Pyx_INCREF(__pyx_v_sample_code); + __Pyx_GIVEREF(__pyx_v_sample_code); + PyList_SET_ITEM(__pyx_t_12, 3, __pyx_v_sample_code); + __pyx_t_11 = 0; + __pyx_t_9 = 0; + __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_err, __pyx_t_12); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 112, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + + /* "LAIProcess.pyx":113 + * err_lai.append(temp_err[0]) # lai + * err.append([sample_lai,temp_err[0],h[0][0],sample_code]) + * err_f.append(f(h[0])[0]) # # <<<<<<<<<<<<<< + * x_arr.append(sample_lai) + * + */ + __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_h, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_9 = __pyx_pf_10LAIProcess_13test_WMCModel_f(__pyx_v_f, __pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_9, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_err_f, __pyx_t_12); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 113, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + + /* "LAIProcess.pyx":114 + * err.append([sample_lai,temp_err[0],h[0][0],sample_code]) + * err_f.append(f(h[0])[0]) # + * x_arr.append(sample_lai) # <<<<<<<<<<<<<< + * + * # + */ + __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_x_arr, __pyx_v_sample_lai); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 114, __pyx_L1_error) + + /* "LAIProcess.pyx":102 + * x_arr=[] + * err_lai=[] + * for lai_waiter_inc_sigma_item in lai_waiter_inc_sigma_list: # <<<<<<<<<<<<<< + * sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=lai_waiter_inc_sigma_item + * def f(X): + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "LAIProcess.pyx":122 + * # logger.info("\n\n") + * + * if draw_flag: # <<<<<<<<<<<<<< + * from matplotlib import pyplot as plt + * plt.scatter(x_arr,err_lai) + */ + __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_v_draw_flag); if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 122, __pyx_L1_error) + if (__pyx_t_17) { + + /* "LAIProcess.pyx":123 + * + * if draw_flag: + * from matplotlib import pyplot as plt # <<<<<<<<<<<<<< + * plt.scatter(x_arr,err_lai) + * plt.title("equation-err") + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __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_12 = __Pyx_Import(__pyx_n_s_matplotlib, __pyx_t_1, -1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_12, __pyx_n_s_pyplot); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_plt = __pyx_t_1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + + /* "LAIProcess.pyx":124 + * if draw_flag: + * from matplotlib import pyplot as plt + * plt.scatter(x_arr,err_lai) # <<<<<<<<<<<<<< + * plt.title("equation-err") + * plt.savefig(test_err_image_path,dpi=600) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_plt, __pyx_n_s_scatter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = NULL; + __pyx_t_15 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_15 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_1)) { + PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_x_arr, __pyx_v_err_lai}; + __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_GOTREF(__pyx_t_12); + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { + PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_x_arr, __pyx_v_err_lai}; + __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_GOTREF(__pyx_t_12); + } else + #endif + { + __pyx_t_11 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + if (__pyx_t_9) { + __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL; + } + __Pyx_INCREF(__pyx_v_x_arr); + __Pyx_GIVEREF(__pyx_v_x_arr); + PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_15, __pyx_v_x_arr); + __Pyx_INCREF(__pyx_v_err_lai); + __Pyx_GIVEREF(__pyx_v_err_lai); + PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_15, __pyx_v_err_lai); + __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 124, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + + /* "LAIProcess.pyx":125 + * from matplotlib import pyplot as plt + * plt.scatter(x_arr,err_lai) + * plt.title("equation-err") # <<<<<<<<<<<<<< + * plt.savefig(test_err_image_path,dpi=600) + * plt.show() + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_plt, __pyx_n_s_title); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + } + } + __pyx_t_12 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_11, __pyx_kp_s_equation_err) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_kp_s_equation_err); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + + /* "LAIProcess.pyx":126 + * plt.scatter(x_arr,err_lai) + * plt.title("equation-err") + * plt.savefig(test_err_image_path,dpi=600) # <<<<<<<<<<<<<< + * plt.show() + * return err + */ + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_plt, __pyx_n_s_savefig); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_test_err_image_path); + __Pyx_GIVEREF(__pyx_v_test_err_image_path); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_test_err_image_path); + __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_dpi, __pyx_int_600) < 0) __PYX_ERR(0, 126, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_1, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "LAIProcess.pyx":127 + * plt.title("equation-err") + * plt.savefig(test_err_image_path,dpi=600) + * plt.show() # <<<<<<<<<<<<<< + * return err + * + */ + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_plt, __pyx_n_s_show); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_1 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + } + } + __pyx_t_9 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "LAIProcess.pyx":122 + * # logger.info("\n\n") + * + * if draw_flag: # <<<<<<<<<<<<<< + * from matplotlib import pyplot as plt + * plt.scatter(x_arr,err_lai) + */ + } + + /* "LAIProcess.pyx":128 + * plt.savefig(test_err_image_path,dpi=600) + * plt.show() + * return err # <<<<<<<<<<<<<< + * + * def processs_WMCModel(param_arr,lai_X0,sigma,inc_angle,soil_water): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_err); + __pyx_r = __pyx_v_err; + goto __pyx_L0; + + /* "LAIProcess.pyx":82 + * return h[0] + * + * def test_WMCModel(lai_waiter_inc_sigma_list,param_arr,lai_X0,test_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ + + /* function exit code */ + __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_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_AddTraceback("LAIProcess.test_WMCModel", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_err); + __Pyx_XDECREF(__pyx_v_err_f); + __Pyx_XDECREF(__pyx_v_x_arr); + __Pyx_XDECREF(__pyx_v_err_lai); + __Pyx_XDECREF(__pyx_v_lai_waiter_inc_sigma_item); + __Pyx_XDECREF(__pyx_v_sample_time); + __Pyx_XDECREF(__pyx_v_sample_code); + __Pyx_XDECREF(__pyx_v_sample_lon); + __Pyx_XDECREF(__pyx_v_sample_lat); + __Pyx_XDECREF(__pyx_v_sample_lai); + __Pyx_XDECREF(__pyx_v_sample_sigma); + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XDECREF(__pyx_v_X0); + __Pyx_XDECREF(__pyx_v_h); + __Pyx_XDECREF(__pyx_v_temp_err); + __Pyx_XDECREF(__pyx_v_plt); + __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "LAIProcess.pyx":130 + * return err + * + * def processs_WMCModel(param_arr,lai_X0,sigma,inc_angle,soil_water): # <<<<<<<<<<<<<< + * + * if(sigma<0 ): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_10LAIProcess_7processs_WMCModel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_10LAIProcess_7processs_WMCModel = {"processs_WMCModel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10LAIProcess_7processs_WMCModel, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_10LAIProcess_7processs_WMCModel(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_param_arr = 0; + PyObject *__pyx_v_lai_X0 = 0; + PyObject *__pyx_v_sigma = 0; + PyObject *__pyx_v_inc_angle = 0; + PyObject *__pyx_v_soil_water = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("processs_WMCModel (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_param_arr,&__pyx_n_s_lai_X0,&__pyx_n_s_sigma,&__pyx_n_s_inc_angle,&__pyx_n_s_soil_water,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_param_arr)) != 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_lai_X0)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("processs_WMCModel", 1, 5, 5, 1); __PYX_ERR(0, 130, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sigma)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("processs_WMCModel", 1, 5, 5, 2); __PYX_ERR(0, 130, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inc_angle)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("processs_WMCModel", 1, 5, 5, 3); __PYX_ERR(0, 130, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_soil_water)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("processs_WMCModel", 1, 5, 5, 4); __PYX_ERR(0, 130, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "processs_WMCModel") < 0)) __PYX_ERR(0, 130, __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_param_arr = values[0]; + __pyx_v_lai_X0 = values[1]; + __pyx_v_sigma = values[2]; + __pyx_v_inc_angle = values[3]; + __pyx_v_soil_water = values[4]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("processs_WMCModel", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 130, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("LAIProcess.processs_WMCModel", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_10LAIProcess_6processs_WMCModel(__pyx_self, __pyx_v_param_arr, __pyx_v_lai_X0, __pyx_v_sigma, __pyx_v_inc_angle, __pyx_v_soil_water); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "LAIProcess.pyx":134 + * if(sigma<0 ): + * return np.nan + * def f(X): # <<<<<<<<<<<<<< + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,soil_water,inc_angle,sigma )] + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_10LAIProcess_17processs_WMCModel_1f(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_10LAIProcess_17processs_WMCModel_1f = {"f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10LAIProcess_17processs_WMCModel_1f, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_10LAIProcess_17processs_WMCModel_1f(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_X = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("f (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_X,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_X)) != 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, "f") < 0)) __PYX_ERR(0, 134, __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_X = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("f", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 134, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("LAIProcess.processs_WMCModel.f", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_10LAIProcess_17processs_WMCModel_f(__pyx_self, __pyx_v_X); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_10LAIProcess_17processs_WMCModel_f(PyObject *__pyx_self, PyObject *__pyx_v_X) { + struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *__pyx_cur_scope; + struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *__pyx_outer_scope; + PyObject *__pyx_v_lai = NULL; + PyObject *__pyx_v_eqs = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("f", 0); + __pyx_outer_scope = (struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *) __Pyx_CyFunction_GetClosure(__pyx_self); + __pyx_cur_scope = __pyx_outer_scope; + + /* "LAIProcess.pyx":135 + * return np.nan + * def f(X): + * lai=X[0] # <<<<<<<<<<<<<< + * eqs=[WMCModel(param_arr,lai,soil_water,inc_angle,sigma )] + * return eqs + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_X, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 135, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_lai = __pyx_t_1; + __pyx_t_1 = 0; + + /* "LAIProcess.pyx":136 + * def f(X): + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,soil_water,inc_angle,sigma )] # <<<<<<<<<<<<<< + * return eqs + * h = leastsq(f, [lai_X0]) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_WMCModel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(!__pyx_cur_scope->__pyx_v_param_arr)) { __Pyx_RaiseClosureNameError("param_arr"); __PYX_ERR(0, 136, __pyx_L1_error) } + if (unlikely(!__pyx_cur_scope->__pyx_v_soil_water)) { __Pyx_RaiseClosureNameError("soil_water"); __PYX_ERR(0, 136, __pyx_L1_error) } + if (unlikely(!__pyx_cur_scope->__pyx_v_inc_angle)) { __Pyx_RaiseClosureNameError("inc_angle"); __PYX_ERR(0, 136, __pyx_L1_error) } + if (unlikely(!__pyx_cur_scope->__pyx_v_sigma)) { __Pyx_RaiseClosureNameError("sigma"); __PYX_ERR(0, 136, __pyx_L1_error) } + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_param_arr, __pyx_v_lai, __pyx_cur_scope->__pyx_v_soil_water, __pyx_cur_scope->__pyx_v_inc_angle, __pyx_cur_scope->__pyx_v_sigma}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_param_arr, __pyx_v_lai, __pyx_cur_scope->__pyx_v_soil_water, __pyx_cur_scope->__pyx_v_inc_angle, __pyx_cur_scope->__pyx_v_sigma}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 5+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else + #endif + { + __pyx_t_5 = PyTuple_New(5+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (__pyx_t_3) { + __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; + } + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_param_arr); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_param_arr); + PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_param_arr); + __Pyx_INCREF(__pyx_v_lai); + __Pyx_GIVEREF(__pyx_v_lai); + PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_lai); + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_soil_water); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_soil_water); + PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_cur_scope->__pyx_v_soil_water); + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inc_angle); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_inc_angle); + PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_cur_scope->__pyx_v_inc_angle); + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sigma); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_sigma); + PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_4, __pyx_cur_scope->__pyx_v_sigma); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_v_eqs = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "LAIProcess.pyx":137 + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,soil_water,inc_angle,sigma )] + * return eqs # <<<<<<<<<<<<<< + * h = leastsq(f, [lai_X0]) + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_eqs); + __pyx_r = __pyx_v_eqs; + goto __pyx_L0; + + /* "LAIProcess.pyx":134 + * if(sigma<0 ): + * return np.nan + * def f(X): # <<<<<<<<<<<<<< + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,soil_water,inc_angle,sigma )] + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("LAIProcess.processs_WMCModel.f", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_lai); + __Pyx_XDECREF(__pyx_v_eqs); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "LAIProcess.pyx":130 + * return err + * + * def processs_WMCModel(param_arr,lai_X0,sigma,inc_angle,soil_water): # <<<<<<<<<<<<<< + * + * if(sigma<0 ): + */ + +static PyObject *__pyx_pf_10LAIProcess_6processs_WMCModel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_param_arr, PyObject *__pyx_v_lai_X0, PyObject *__pyx_v_sigma, PyObject *__pyx_v_inc_angle, PyObject *__pyx_v_soil_water) { + struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *__pyx_cur_scope; + PyObject *__pyx_v_f = 0; + PyObject *__pyx_v_h = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("processs_WMCModel", 0); + __pyx_cur_scope = (struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *)__pyx_tp_new_10LAIProcess___pyx_scope_struct_2_processs_WMCModel(__pyx_ptype_10LAIProcess___pyx_scope_struct_2_processs_WMCModel, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(0, 130, __pyx_L1_error) + } else { + __Pyx_GOTREF(__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_param_arr = __pyx_v_param_arr; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_param_arr); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_param_arr); + __pyx_cur_scope->__pyx_v_sigma = __pyx_v_sigma; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_sigma); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_sigma); + __pyx_cur_scope->__pyx_v_inc_angle = __pyx_v_inc_angle; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inc_angle); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_inc_angle); + __pyx_cur_scope->__pyx_v_soil_water = __pyx_v_soil_water; + __Pyx_INCREF(__pyx_cur_scope->__pyx_v_soil_water); + __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_soil_water); + + /* "LAIProcess.pyx":132 + * def processs_WMCModel(param_arr,lai_X0,sigma,inc_angle,soil_water): + * + * if(sigma<0 ): # <<<<<<<<<<<<<< + * return np.nan + * def f(X): + */ + __pyx_t_1 = PyObject_RichCompare(__pyx_cur_scope->__pyx_v_sigma, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 132, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 132, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "LAIProcess.pyx":133 + * + * if(sigma<0 ): + * return np.nan # <<<<<<<<<<<<<< + * def f(X): + * lai=X[0] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "LAIProcess.pyx":132 + * def processs_WMCModel(param_arr,lai_X0,sigma,inc_angle,soil_water): + * + * if(sigma<0 ): # <<<<<<<<<<<<<< + * return np.nan + * def f(X): + */ + } + + /* "LAIProcess.pyx":134 + * if(sigma<0 ): + * return np.nan + * def f(X): # <<<<<<<<<<<<<< + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,soil_water,inc_angle,sigma )] + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_10LAIProcess_17processs_WMCModel_1f, 0, __pyx_n_s_processs_WMCModel_locals_f, ((PyObject*)__pyx_cur_scope), __pyx_n_s_LAIProcess, __pyx_d, ((PyObject *)__pyx_codeobj__6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_f = __pyx_t_3; + __pyx_t_3 = 0; + + /* "LAIProcess.pyx":138 + * eqs=[WMCModel(param_arr,lai,soil_water,inc_angle,sigma )] + * return eqs + * h = leastsq(f, [lai_X0]) # <<<<<<<<<<<<<< + * + * return h[0][0] + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_leastsq); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_lai_X0); + __Pyx_GIVEREF(__pyx_v_lai_X0); + PyList_SET_ITEM(__pyx_t_4, 0, __pyx_v_lai_X0); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_1)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_f, __pyx_t_4}; + __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { + PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_f, __pyx_t_4}; + __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else + #endif + { + __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 138, __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_f); + __Pyx_GIVEREF(__pyx_v_f); + PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_f); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 138, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_h = __pyx_t_3; + __pyx_t_3 = 0; + + /* "LAIProcess.pyx":140 + * h = leastsq(f, [lai_X0]) + * + * return h[0][0] # <<<<<<<<<<<<<< + * + * # Cython + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_h, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "LAIProcess.pyx":130 + * return err + * + * def processs_WMCModel(param_arr,lai_X0,sigma,inc_angle,soil_water): # <<<<<<<<<<<<<< + * + * if(sigma<0 ): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("LAIProcess.processs_WMCModel", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XDECREF(__pyx_v_h); + __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "LAIProcess.pyx":143 + * + * # Cython + * cpdef np.ndarray[double,ndim=2] process_tiff(np.ndarray[double,ndim=2] sigma_tiff, # <<<<<<<<<<<<<< + * np.ndarray[double,ndim=2] inc_tiff, + * np.ndarray[double,ndim=2] soil_water_tiff, + */ + +static PyObject *__pyx_pw_10LAIProcess_9process_tiff(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyArrayObject *__pyx_f_10LAIProcess_process_tiff(PyArrayObject *__pyx_v_sigma_tiff, PyArrayObject *__pyx_v_inc_tiff, PyArrayObject *__pyx_v_soil_water_tiff, PyArrayObject *__pyx_v_param_arr, double __pyx_v_lai_X0, CYTHON_UNUSED int __pyx_skip_dispatch) { + PyArrayObject *__pyx_v_result = 0; + CYTHON_UNUSED int __pyx_v_param_arr_length; + int __pyx_v_height; + int __pyx_v_width; + int __pyx_v_i; + int __pyx_v_j; + double __pyx_v_temp; + __Pyx_LocalBuf_ND __pyx_pybuffernd_inc_tiff; + __Pyx_Buffer __pyx_pybuffer_inc_tiff; + __Pyx_LocalBuf_ND __pyx_pybuffernd_param_arr; + __Pyx_Buffer __pyx_pybuffer_param_arr; + __Pyx_LocalBuf_ND __pyx_pybuffernd_result; + __Pyx_Buffer __pyx_pybuffer_result; + __Pyx_LocalBuf_ND __pyx_pybuffernd_sigma_tiff; + __Pyx_Buffer __pyx_pybuffer_sigma_tiff; + __Pyx_LocalBuf_ND __pyx_pybuffernd_soil_water_tiff; + __Pyx_Buffer __pyx_pybuffer_soil_water_tiff; + PyArrayObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + Py_ssize_t __pyx_t_5; + Py_ssize_t __pyx_t_6; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + double __pyx_t_13; + int __pyx_t_14; + double __pyx_t_15; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("process_tiff", 0); + __pyx_pybuffer_result.pybuffer.buf = NULL; + __pyx_pybuffer_result.refcount = 0; + __pyx_pybuffernd_result.data = NULL; + __pyx_pybuffernd_result.rcbuffer = &__pyx_pybuffer_result; + __pyx_pybuffer_sigma_tiff.pybuffer.buf = NULL; + __pyx_pybuffer_sigma_tiff.refcount = 0; + __pyx_pybuffernd_sigma_tiff.data = NULL; + __pyx_pybuffernd_sigma_tiff.rcbuffer = &__pyx_pybuffer_sigma_tiff; + __pyx_pybuffer_inc_tiff.pybuffer.buf = NULL; + __pyx_pybuffer_inc_tiff.refcount = 0; + __pyx_pybuffernd_inc_tiff.data = NULL; + __pyx_pybuffernd_inc_tiff.rcbuffer = &__pyx_pybuffer_inc_tiff; + __pyx_pybuffer_soil_water_tiff.pybuffer.buf = NULL; + __pyx_pybuffer_soil_water_tiff.refcount = 0; + __pyx_pybuffernd_soil_water_tiff.data = NULL; + __pyx_pybuffernd_soil_water_tiff.rcbuffer = &__pyx_pybuffer_soil_water_tiff; + __pyx_pybuffer_param_arr.pybuffer.buf = NULL; + __pyx_pybuffer_param_arr.refcount = 0; + __pyx_pybuffernd_param_arr.data = NULL; + __pyx_pybuffernd_param_arr.rcbuffer = &__pyx_pybuffer_param_arr; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer, (PyObject*)__pyx_v_sigma_tiff, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 143, __pyx_L1_error) + } + __pyx_pybuffernd_sigma_tiff.diminfo[0].strides = __pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sigma_tiff.diminfo[0].shape = __pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_sigma_tiff.diminfo[1].strides = __pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_sigma_tiff.diminfo[1].shape = __pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer, (PyObject*)__pyx_v_inc_tiff, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 143, __pyx_L1_error) + } + __pyx_pybuffernd_inc_tiff.diminfo[0].strides = __pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_inc_tiff.diminfo[0].shape = __pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_inc_tiff.diminfo[1].strides = __pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_inc_tiff.diminfo[1].shape = __pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer, (PyObject*)__pyx_v_soil_water_tiff, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 143, __pyx_L1_error) + } + __pyx_pybuffernd_soil_water_tiff.diminfo[0].strides = __pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_soil_water_tiff.diminfo[0].shape = __pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_soil_water_tiff.diminfo[1].strides = __pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_soil_water_tiff.diminfo[1].shape = __pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_param_arr.rcbuffer->pybuffer, (PyObject*)__pyx_v_param_arr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 143, __pyx_L1_error) + } + __pyx_pybuffernd_param_arr.diminfo[0].strides = __pyx_pybuffernd_param_arr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_param_arr.diminfo[0].shape = __pyx_pybuffernd_param_arr.rcbuffer->pybuffer.shape[0]; + + /* "LAIProcess.pyx":149 + * double lai_X0): + * + * cdef np.ndarray[double,ndim=2] result=sigma_tiff # <<<<<<<<<<<<<< + * cdef int param_arr_length=param_arr.shape[0] + * cdef int height=sigma_tiff.shape[0] + */ + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_result.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_v_sigma_tiff), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_result = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_result.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 149, __pyx_L1_error) + } else {__pyx_pybuffernd_result.diminfo[0].strides = __pyx_pybuffernd_result.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_result.diminfo[0].shape = __pyx_pybuffernd_result.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_result.diminfo[1].strides = __pyx_pybuffernd_result.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_result.diminfo[1].shape = __pyx_pybuffernd_result.rcbuffer->pybuffer.shape[1]; + } + } + __Pyx_INCREF(((PyObject *)__pyx_v_sigma_tiff)); + __pyx_v_result = ((PyArrayObject *)__pyx_v_sigma_tiff); + + /* "LAIProcess.pyx":150 + * + * cdef np.ndarray[double,ndim=2] result=sigma_tiff + * cdef int param_arr_length=param_arr.shape[0] # <<<<<<<<<<<<<< + * cdef int height=sigma_tiff.shape[0] + * cdef int width=sigma_tiff.shape[1] + */ + __pyx_v_param_arr_length = (__pyx_v_param_arr->dimensions[0]); + + /* "LAIProcess.pyx":151 + * cdef np.ndarray[double,ndim=2] result=sigma_tiff + * cdef int param_arr_length=param_arr.shape[0] + * cdef int height=sigma_tiff.shape[0] # <<<<<<<<<<<<<< + * cdef int width=sigma_tiff.shape[1] + * cdef int i=0 + */ + __pyx_v_height = (__pyx_v_sigma_tiff->dimensions[0]); + + /* "LAIProcess.pyx":152 + * cdef int param_arr_length=param_arr.shape[0] + * cdef int height=sigma_tiff.shape[0] + * cdef int width=sigma_tiff.shape[1] # <<<<<<<<<<<<<< + * cdef int i=0 + * cdef int j=0 + */ + __pyx_v_width = (__pyx_v_sigma_tiff->dimensions[1]); + + /* "LAIProcess.pyx":153 + * cdef int height=sigma_tiff.shape[0] + * cdef int width=sigma_tiff.shape[1] + * cdef int i=0 # <<<<<<<<<<<<<< + * cdef int j=0 + * cdef double temp=0 + */ + __pyx_v_i = 0; + + /* "LAIProcess.pyx":154 + * cdef int width=sigma_tiff.shape[1] + * cdef int i=0 + * cdef int j=0 # <<<<<<<<<<<<<< + * cdef double temp=0 + * + */ + __pyx_v_j = 0; + + /* "LAIProcess.pyx":155 + * cdef int i=0 + * cdef int j=0 + * cdef double temp=0 # <<<<<<<<<<<<<< + * + * while i=0 else np.nan + */ + while (1) { + __pyx_t_1 = ((__pyx_v_j < __pyx_v_width) != 0); + if (!__pyx_t_1) break; + + /* "LAIProcess.pyx":160 + * j=0 + * while j=0 else np.nan + * result[i,j]=temp + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_processs_WMCModel); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_lai_X0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __pyx_v_i; + __pyx_t_6 = __pyx_v_j; + __pyx_t_7 = -1; + if (__pyx_t_5 < 0) { + __pyx_t_5 += __pyx_pybuffernd_sigma_tiff.diminfo[0].shape; + if (unlikely(__pyx_t_5 < 0)) __pyx_t_7 = 0; + } else if (unlikely(__pyx_t_5 >= __pyx_pybuffernd_sigma_tiff.diminfo[0].shape)) __pyx_t_7 = 0; + if (__pyx_t_6 < 0) { + __pyx_t_6 += __pyx_pybuffernd_sigma_tiff.diminfo[1].shape; + if (unlikely(__pyx_t_6 < 0)) __pyx_t_7 = 1; + } else if (unlikely(__pyx_t_6 >= __pyx_pybuffernd_sigma_tiff.diminfo[1].shape)) __pyx_t_7 = 1; + if (unlikely(__pyx_t_7 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_7); + __PYX_ERR(0, 160, __pyx_L1_error) + } + __pyx_t_8 = PyFloat_FromDouble((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_sigma_tiff.diminfo[0].strides, __pyx_t_6, __pyx_pybuffernd_sigma_tiff.diminfo[1].strides))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __pyx_v_i; + __pyx_t_5 = __pyx_v_j; + __pyx_t_7 = -1; + if (__pyx_t_6 < 0) { + __pyx_t_6 += __pyx_pybuffernd_inc_tiff.diminfo[0].shape; + if (unlikely(__pyx_t_6 < 0)) __pyx_t_7 = 0; + } else if (unlikely(__pyx_t_6 >= __pyx_pybuffernd_inc_tiff.diminfo[0].shape)) __pyx_t_7 = 0; + if (__pyx_t_5 < 0) { + __pyx_t_5 += __pyx_pybuffernd_inc_tiff.diminfo[1].shape; + if (unlikely(__pyx_t_5 < 0)) __pyx_t_7 = 1; + } else if (unlikely(__pyx_t_5 >= __pyx_pybuffernd_inc_tiff.diminfo[1].shape)) __pyx_t_7 = 1; + if (unlikely(__pyx_t_7 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_7); + __PYX_ERR(0, 160, __pyx_L1_error) + } + __pyx_t_9 = PyFloat_FromDouble((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_inc_tiff.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_inc_tiff.diminfo[1].strides))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_5 = __pyx_v_i; + __pyx_t_6 = __pyx_v_j; + __pyx_t_7 = -1; + if (__pyx_t_5 < 0) { + __pyx_t_5 += __pyx_pybuffernd_soil_water_tiff.diminfo[0].shape; + if (unlikely(__pyx_t_5 < 0)) __pyx_t_7 = 0; + } else if (unlikely(__pyx_t_5 >= __pyx_pybuffernd_soil_water_tiff.diminfo[0].shape)) __pyx_t_7 = 0; + if (__pyx_t_6 < 0) { + __pyx_t_6 += __pyx_pybuffernd_soil_water_tiff.diminfo[1].shape; + if (unlikely(__pyx_t_6 < 0)) __pyx_t_7 = 1; + } else if (unlikely(__pyx_t_6 >= __pyx_pybuffernd_soil_water_tiff.diminfo[1].shape)) __pyx_t_7 = 1; + if (unlikely(__pyx_t_7 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_7); + __PYX_ERR(0, 160, __pyx_L1_error) + } + __pyx_t_10 = PyFloat_FromDouble((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_soil_water_tiff.diminfo[0].strides, __pyx_t_6, __pyx_pybuffernd_soil_water_tiff.diminfo[1].strides))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_7 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_3)) { + PyObject *__pyx_temp[6] = {__pyx_t_11, ((PyObject *)__pyx_v_param_arr), __pyx_t_4, __pyx_t_8, __pyx_t_9, __pyx_t_10}; + __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { + PyObject *__pyx_temp[6] = {__pyx_t_11, ((PyObject *)__pyx_v_param_arr), __pyx_t_4, __pyx_t_8, __pyx_t_9, __pyx_t_10}; + __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } else + #endif + { + __pyx_t_12 = PyTuple_New(5+__pyx_t_7); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + if (__pyx_t_11) { + __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); __pyx_t_11 = NULL; + } + __Pyx_INCREF(((PyObject *)__pyx_v_param_arr)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_param_arr)); + PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_7, ((PyObject *)__pyx_v_param_arr)); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_7, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_8); + PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_7, __pyx_t_8); + __Pyx_GIVEREF(__pyx_t_9); + PyTuple_SET_ITEM(__pyx_t_12, 3+__pyx_t_7, __pyx_t_9); + __Pyx_GIVEREF(__pyx_t_10); + PyTuple_SET_ITEM(__pyx_t_12, 4+__pyx_t_7, __pyx_t_10); + __pyx_t_4 = 0; + __pyx_t_8 = 0; + __pyx_t_9 = 0; + __pyx_t_10 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_temp = __pyx_t_13; + + /* "LAIProcess.pyx":161 + * while j=0 else np.nan # <<<<<<<<<<<<<< + * result[i,j]=temp + * j=j+1 + */ + __pyx_t_14 = ((__pyx_v_temp < 10.0) != 0); + if (__pyx_t_14) { + } else { + __pyx_t_1 = __pyx_t_14; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_14 = ((__pyx_v_temp >= 0.0) != 0); + __pyx_t_1 = __pyx_t_14; + __pyx_L7_bool_binop_done:; + if (__pyx_t_1) { + __pyx_t_13 = __pyx_v_temp; + } else { + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_nan); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_t_15; + } + __pyx_v_temp = __pyx_t_13; + + /* "LAIProcess.pyx":162 + * temp = processs_WMCModel(param_arr,lai_X0,sigma_tiff[i,j],inc_tiff[i,j],soil_water_tiff[i,j]) + * temp=temp if temp<10 and temp>=0 else np.nan + * result[i,j]=temp # <<<<<<<<<<<<<< + * j=j+1 + * i=i+1 + */ + __pyx_t_6 = __pyx_v_i; + __pyx_t_5 = __pyx_v_j; + __pyx_t_7 = -1; + if (__pyx_t_6 < 0) { + __pyx_t_6 += __pyx_pybuffernd_result.diminfo[0].shape; + if (unlikely(__pyx_t_6 < 0)) __pyx_t_7 = 0; + } else if (unlikely(__pyx_t_6 >= __pyx_pybuffernd_result.diminfo[0].shape)) __pyx_t_7 = 0; + if (__pyx_t_5 < 0) { + __pyx_t_5 += __pyx_pybuffernd_result.diminfo[1].shape; + if (unlikely(__pyx_t_5 < 0)) __pyx_t_7 = 1; + } else if (unlikely(__pyx_t_5 >= __pyx_pybuffernd_result.diminfo[1].shape)) __pyx_t_7 = 1; + if (unlikely(__pyx_t_7 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_7); + __PYX_ERR(0, 162, __pyx_L1_error) + } + *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_result.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_result.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_result.diminfo[1].strides) = __pyx_v_temp; + + /* "LAIProcess.pyx":163 + * temp=temp if temp<10 and temp>=0 else np.nan + * result[i,j]=temp + * j=j+1 # <<<<<<<<<<<<<< + * i=i+1 + * return result + */ + __pyx_v_j = (__pyx_v_j + 1); + } + + /* "LAIProcess.pyx":164 + * result[i,j]=temp + * j=j+1 + * i=i+1 # <<<<<<<<<<<<<< + * return result + * + */ + __pyx_v_i = (__pyx_v_i + 1); + } + + /* "LAIProcess.pyx":165 + * j=j+1 + * i=i+1 + * return result # <<<<<<<<<<<<<< + * + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + __Pyx_INCREF(((PyObject *)__pyx_v_result)); + __pyx_r = ((PyArrayObject *)__pyx_v_result); + goto __pyx_L0; + + /* "LAIProcess.pyx":143 + * + * # Cython + * cpdef np.ndarray[double,ndim=2] process_tiff(np.ndarray[double,ndim=2] sigma_tiff, # <<<<<<<<<<<<<< + * np.ndarray[double,ndim=2] inc_tiff, + * np.ndarray[double,ndim=2] soil_water_tiff, + */ + + /* 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_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_param_arr.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_result.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("LAIProcess.process_tiff", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_param_arr.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_result.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_10LAIProcess_9process_tiff(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_10LAIProcess_9process_tiff(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_sigma_tiff = 0; + PyArrayObject *__pyx_v_inc_tiff = 0; + PyArrayObject *__pyx_v_soil_water_tiff = 0; + PyArrayObject *__pyx_v_param_arr = 0; + double __pyx_v_lai_X0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("process_tiff (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sigma_tiff,&__pyx_n_s_inc_tiff,&__pyx_n_s_soil_water_tiff,&__pyx_n_s_param_arr,&__pyx_n_s_lai_X0,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_sigma_tiff)) != 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_inc_tiff)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("process_tiff", 1, 5, 5, 1); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_soil_water_tiff)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("process_tiff", 1, 5, 5, 2); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_param_arr)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("process_tiff", 1, 5, 5, 3); __PYX_ERR(0, 143, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lai_X0)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("process_tiff", 1, 5, 5, 4); __PYX_ERR(0, 143, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "process_tiff") < 0)) __PYX_ERR(0, 143, __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_sigma_tiff = ((PyArrayObject *)values[0]); + __pyx_v_inc_tiff = ((PyArrayObject *)values[1]); + __pyx_v_soil_water_tiff = ((PyArrayObject *)values[2]); + __pyx_v_param_arr = ((PyArrayObject *)values[3]); + __pyx_v_lai_X0 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_lai_X0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 147, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("process_tiff", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 143, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("LAIProcess.process_tiff", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sigma_tiff), __pyx_ptype_5numpy_ndarray, 1, "sigma_tiff", 0))) __PYX_ERR(0, 143, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_inc_tiff), __pyx_ptype_5numpy_ndarray, 1, "inc_tiff", 0))) __PYX_ERR(0, 144, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_soil_water_tiff), __pyx_ptype_5numpy_ndarray, 1, "soil_water_tiff", 0))) __PYX_ERR(0, 145, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_param_arr), __pyx_ptype_5numpy_ndarray, 1, "param_arr", 0))) __PYX_ERR(0, 146, __pyx_L1_error) + __pyx_r = __pyx_pf_10LAIProcess_8process_tiff(__pyx_self, __pyx_v_sigma_tiff, __pyx_v_inc_tiff, __pyx_v_soil_water_tiff, __pyx_v_param_arr, __pyx_v_lai_X0); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_10LAIProcess_8process_tiff(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_sigma_tiff, PyArrayObject *__pyx_v_inc_tiff, PyArrayObject *__pyx_v_soil_water_tiff, PyArrayObject *__pyx_v_param_arr, double __pyx_v_lai_X0) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_inc_tiff; + __Pyx_Buffer __pyx_pybuffer_inc_tiff; + __Pyx_LocalBuf_ND __pyx_pybuffernd_param_arr; + __Pyx_Buffer __pyx_pybuffer_param_arr; + __Pyx_LocalBuf_ND __pyx_pybuffernd_sigma_tiff; + __Pyx_Buffer __pyx_pybuffer_sigma_tiff; + __Pyx_LocalBuf_ND __pyx_pybuffernd_soil_water_tiff; + __Pyx_Buffer __pyx_pybuffer_soil_water_tiff; + 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("process_tiff", 0); + __pyx_pybuffer_sigma_tiff.pybuffer.buf = NULL; + __pyx_pybuffer_sigma_tiff.refcount = 0; + __pyx_pybuffernd_sigma_tiff.data = NULL; + __pyx_pybuffernd_sigma_tiff.rcbuffer = &__pyx_pybuffer_sigma_tiff; + __pyx_pybuffer_inc_tiff.pybuffer.buf = NULL; + __pyx_pybuffer_inc_tiff.refcount = 0; + __pyx_pybuffernd_inc_tiff.data = NULL; + __pyx_pybuffernd_inc_tiff.rcbuffer = &__pyx_pybuffer_inc_tiff; + __pyx_pybuffer_soil_water_tiff.pybuffer.buf = NULL; + __pyx_pybuffer_soil_water_tiff.refcount = 0; + __pyx_pybuffernd_soil_water_tiff.data = NULL; + __pyx_pybuffernd_soil_water_tiff.rcbuffer = &__pyx_pybuffer_soil_water_tiff; + __pyx_pybuffer_param_arr.pybuffer.buf = NULL; + __pyx_pybuffer_param_arr.refcount = 0; + __pyx_pybuffernd_param_arr.data = NULL; + __pyx_pybuffernd_param_arr.rcbuffer = &__pyx_pybuffer_param_arr; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer, (PyObject*)__pyx_v_sigma_tiff, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 143, __pyx_L1_error) + } + __pyx_pybuffernd_sigma_tiff.diminfo[0].strides = __pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sigma_tiff.diminfo[0].shape = __pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_sigma_tiff.diminfo[1].strides = __pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_sigma_tiff.diminfo[1].shape = __pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer, (PyObject*)__pyx_v_inc_tiff, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 143, __pyx_L1_error) + } + __pyx_pybuffernd_inc_tiff.diminfo[0].strides = __pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_inc_tiff.diminfo[0].shape = __pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_inc_tiff.diminfo[1].strides = __pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_inc_tiff.diminfo[1].shape = __pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer, (PyObject*)__pyx_v_soil_water_tiff, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 143, __pyx_L1_error) + } + __pyx_pybuffernd_soil_water_tiff.diminfo[0].strides = __pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_soil_water_tiff.diminfo[0].shape = __pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_soil_water_tiff.diminfo[1].strides = __pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_soil_water_tiff.diminfo[1].shape = __pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_param_arr.rcbuffer->pybuffer, (PyObject*)__pyx_v_param_arr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 143, __pyx_L1_error) + } + __pyx_pybuffernd_param_arr.diminfo[0].strides = __pyx_pybuffernd_param_arr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_param_arr.diminfo[0].shape = __pyx_pybuffernd_param_arr.rcbuffer->pybuffer.shape[0]; + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((PyObject *)__pyx_f_10LAIProcess_process_tiff(__pyx_v_sigma_tiff, __pyx_v_inc_tiff, __pyx_v_soil_water_tiff, __pyx_v_param_arr, __pyx_v_lai_X0, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_param_arr.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("LAIProcess.process_tiff", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_inc_tiff.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_param_arr.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sigma_tiff.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_soil_water_tiff.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":735 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { + 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("PyArray_MultiIterNew1", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":736 + * + * cdef inline object PyArray_MultiIterNew1(a): + * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew2(a, b): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":735 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":738 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { + 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("PyArray_MultiIterNew2", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":739 + * + * cdef inline object PyArray_MultiIterNew2(a, b): + * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 739, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":738 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":741 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { + 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("PyArray_MultiIterNew3", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":742 + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 742, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":741 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":744 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { + 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("PyArray_MultiIterNew4", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":745 + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 745, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":744 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":747 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { + 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("PyArray_MultiIterNew5", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":748 + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 748, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":747 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":750 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("PyDataType_SHAPE", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":751 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + __pyx_t_1 = (PyDataType_HASSUBARRAY(__pyx_v_d) != 0); + if (__pyx_t_1) { + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":752 + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape # <<<<<<<<<<<<<< + * else: + * return () + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape)); + __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":751 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + } + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":754 + * return d.subarray.shape + * else: + * return () # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_empty_tuple); + __pyx_r = __pyx_empty_tuple; + goto __pyx_L0; + } + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":750 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":931 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ + +static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_array_base", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":932 + * + * cdef inline void set_array_base(ndarray arr, object base): + * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< + * PyArray_SetBaseObject(arr, base) + * + */ + Py_INCREF(__pyx_v_base); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":933 + * cdef inline void set_array_base(ndarray arr, object base): + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< + * + * cdef inline object get_array_base(ndarray arr): + */ + (void)(PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base)); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":931 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":935 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { + PyObject *__pyx_v_base; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("get_array_base", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":936 + * + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< + * if base is NULL: + * return None + */ + __pyx_v_base = PyArray_BASE(__pyx_v_arr); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":937 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + __pyx_t_1 = ((__pyx_v_base == NULL) != 0); + if (__pyx_t_1) { + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":938 + * base = PyArray_BASE(arr) + * if base is NULL: + * return None # <<<<<<<<<<<<<< + * return base + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":937 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + } + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":939 + * if base is NULL: + * return None + * return base # <<<<<<<<<<<<<< + * + * # Versions of the import_* functions which are more suitable for + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_base)); + __pyx_r = ((PyObject *)__pyx_v_base); + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":935 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":943 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + 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("import_array", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":944 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":945 + * cdef inline int import_array() except -1: + * try: + * __pyx_import_array() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") + */ + __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 945, __pyx_L3_error) + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":944 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":946 + * try: + * __pyx_import_array() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.multiarray failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 946, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":947 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 947, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(1, 947, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":944 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":943 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ + + /* function exit code */ + __pyx_r = 0; + 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("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":949 + * raise ImportError("numpy.core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + 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("import_umath", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":950 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":951 + * cdef inline int import_umath() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.umath failed to import") + */ + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 951, __pyx_L3_error) + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":950 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":952 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.umath failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 952, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":953 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 953, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(1, 953, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":950 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":949 + * raise ImportError("numpy.core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + + /* function exit code */ + __pyx_r = 0; + 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("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":955 + * raise ImportError("numpy.core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + 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("import_ufunc", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":956 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":957 + * cdef inline int import_ufunc() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.umath failed to import") + */ + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 957, __pyx_L3_error) + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":956 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":958 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.umath failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 958, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":959 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef extern from *: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 959, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(1, 959, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":956 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":955 + * raise ImportError("numpy.core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + + /* function exit code */ + __pyx_r = 0; + 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("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":969 + * + * + * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ + +static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_timedelta64_object", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":981 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":969 + * + * + * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":984 + * + * + * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ + +static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_datetime64_object", 0); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":996 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":984 + * + * + * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":999 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ + +static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { + npy_datetime __pyx_r; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1006 + * also needed. That can be found using `get_datetime64_unit`. + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":999 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1009 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ + +static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { + npy_timedelta __pyx_r; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1013 + * returns the int64 value underlying scalar numpy timedelta64 object + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1009 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1016 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + +static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { + NPY_DATETIMEUNIT __pyx_r; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1020 + * returns the unit part of the dtype for a numpy datetime64 object. + * """ + * return (obj).obmeta.base # <<<<<<<<<<<<<< + */ + __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); + goto __pyx_L0; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1016 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +static struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *__pyx_freelist_10LAIProcess___pyx_scope_struct__train_WMCmodel[8]; +static int __pyx_freecount_10LAIProcess___pyx_scope_struct__train_WMCmodel = 0; + +static PyObject *__pyx_tp_new_10LAIProcess___pyx_scope_struct__train_WMCmodel(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_10LAIProcess___pyx_scope_struct__train_WMCmodel > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel)))) { + o = (PyObject*)__pyx_freelist_10LAIProcess___pyx_scope_struct__train_WMCmodel[--__pyx_freecount_10LAIProcess___pyx_scope_struct__train_WMCmodel]; + memset(o, 0, sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + return o; +} + +static void __pyx_tp_dealloc_10LAIProcess___pyx_scope_struct__train_WMCmodel(PyObject *o) { + struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *p = (struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *)o; + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_lai_water_inc_sigma_list); + if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_10LAIProcess___pyx_scope_struct__train_WMCmodel < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel)))) { + __pyx_freelist_10LAIProcess___pyx_scope_struct__train_WMCmodel[__pyx_freecount_10LAIProcess___pyx_scope_struct__train_WMCmodel++] = ((struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *)o); + } else { + (*Py_TYPE(o)->tp_free)(o); + } +} + +static int __pyx_tp_traverse_10LAIProcess___pyx_scope_struct__train_WMCmodel(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *p = (struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *)o; + if (p->__pyx_v_lai_water_inc_sigma_list) { + e = (*v)(p->__pyx_v_lai_water_inc_sigma_list, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_10LAIProcess___pyx_scope_struct__train_WMCmodel(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *p = (struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel *)o; + tmp = ((PyObject*)p->__pyx_v_lai_water_inc_sigma_list); + p->__pyx_v_lai_water_inc_sigma_list = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyTypeObject __pyx_type_10LAIProcess___pyx_scope_struct__train_WMCmodel = { + PyVarObject_HEAD_INIT(0, 0) + "LAIProcess.__pyx_scope_struct__train_WMCmodel", /*tp_name*/ + sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct__train_WMCmodel), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_10LAIProcess___pyx_scope_struct__train_WMCmodel, /*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_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_10LAIProcess___pyx_scope_struct__train_WMCmodel, /*tp_traverse*/ + __pyx_tp_clear_10LAIProcess___pyx_scope_struct__train_WMCmodel, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*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_10LAIProcess___pyx_scope_struct__train_WMCmodel, /*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_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *__pyx_freelist_10LAIProcess___pyx_scope_struct_1_test_WMCModel[8]; +static int __pyx_freecount_10LAIProcess___pyx_scope_struct_1_test_WMCModel = 0; + +static PyObject *__pyx_tp_new_10LAIProcess___pyx_scope_struct_1_test_WMCModel(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_10LAIProcess___pyx_scope_struct_1_test_WMCModel > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel)))) { + o = (PyObject*)__pyx_freelist_10LAIProcess___pyx_scope_struct_1_test_WMCModel[--__pyx_freecount_10LAIProcess___pyx_scope_struct_1_test_WMCModel]; + memset(o, 0, sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + return o; +} + +static void __pyx_tp_dealloc_10LAIProcess___pyx_scope_struct_1_test_WMCModel(PyObject *o) { + struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *p = (struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *)o; + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_csv_sigma); + Py_CLEAR(p->__pyx_v_param_arr); + Py_CLEAR(p->__pyx_v_sample_inc); + Py_CLEAR(p->__pyx_v_sample_soil); + if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_10LAIProcess___pyx_scope_struct_1_test_WMCModel < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel)))) { + __pyx_freelist_10LAIProcess___pyx_scope_struct_1_test_WMCModel[__pyx_freecount_10LAIProcess___pyx_scope_struct_1_test_WMCModel++] = ((struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *)o); + } else { + (*Py_TYPE(o)->tp_free)(o); + } +} + +static int __pyx_tp_traverse_10LAIProcess___pyx_scope_struct_1_test_WMCModel(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *p = (struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *)o; + if (p->__pyx_v_csv_sigma) { + e = (*v)(p->__pyx_v_csv_sigma, a); if (e) return e; + } + if (p->__pyx_v_param_arr) { + e = (*v)(p->__pyx_v_param_arr, a); if (e) return e; + } + if (p->__pyx_v_sample_inc) { + e = (*v)(p->__pyx_v_sample_inc, a); if (e) return e; + } + if (p->__pyx_v_sample_soil) { + e = (*v)(p->__pyx_v_sample_soil, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_10LAIProcess___pyx_scope_struct_1_test_WMCModel(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *p = (struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel *)o; + tmp = ((PyObject*)p->__pyx_v_csv_sigma); + p->__pyx_v_csv_sigma = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->__pyx_v_param_arr); + p->__pyx_v_param_arr = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->__pyx_v_sample_inc); + p->__pyx_v_sample_inc = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->__pyx_v_sample_soil); + p->__pyx_v_sample_soil = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyTypeObject __pyx_type_10LAIProcess___pyx_scope_struct_1_test_WMCModel = { + PyVarObject_HEAD_INIT(0, 0) + "LAIProcess.__pyx_scope_struct_1_test_WMCModel", /*tp_name*/ + sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct_1_test_WMCModel), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_10LAIProcess___pyx_scope_struct_1_test_WMCModel, /*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_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_10LAIProcess___pyx_scope_struct_1_test_WMCModel, /*tp_traverse*/ + __pyx_tp_clear_10LAIProcess___pyx_scope_struct_1_test_WMCModel, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*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_10LAIProcess___pyx_scope_struct_1_test_WMCModel, /*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_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *__pyx_freelist_10LAIProcess___pyx_scope_struct_2_processs_WMCModel[8]; +static int __pyx_freecount_10LAIProcess___pyx_scope_struct_2_processs_WMCModel = 0; + +static PyObject *__pyx_tp_new_10LAIProcess___pyx_scope_struct_2_processs_WMCModel(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_10LAIProcess___pyx_scope_struct_2_processs_WMCModel > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel)))) { + o = (PyObject*)__pyx_freelist_10LAIProcess___pyx_scope_struct_2_processs_WMCModel[--__pyx_freecount_10LAIProcess___pyx_scope_struct_2_processs_WMCModel]; + memset(o, 0, sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel)); + (void) PyObject_INIT(o, t); + PyObject_GC_Track(o); + } else { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + return o; +} + +static void __pyx_tp_dealloc_10LAIProcess___pyx_scope_struct_2_processs_WMCModel(PyObject *o) { + struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *p = (struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *)o; + PyObject_GC_UnTrack(o); + Py_CLEAR(p->__pyx_v_inc_angle); + Py_CLEAR(p->__pyx_v_param_arr); + Py_CLEAR(p->__pyx_v_sigma); + Py_CLEAR(p->__pyx_v_soil_water); + if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_10LAIProcess___pyx_scope_struct_2_processs_WMCModel < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel)))) { + __pyx_freelist_10LAIProcess___pyx_scope_struct_2_processs_WMCModel[__pyx_freecount_10LAIProcess___pyx_scope_struct_2_processs_WMCModel++] = ((struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *)o); + } else { + (*Py_TYPE(o)->tp_free)(o); + } +} + +static int __pyx_tp_traverse_10LAIProcess___pyx_scope_struct_2_processs_WMCModel(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *p = (struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *)o; + if (p->__pyx_v_inc_angle) { + e = (*v)(p->__pyx_v_inc_angle, a); if (e) return e; + } + if (p->__pyx_v_param_arr) { + e = (*v)(p->__pyx_v_param_arr, a); if (e) return e; + } + if (p->__pyx_v_sigma) { + e = (*v)(p->__pyx_v_sigma, a); if (e) return e; + } + if (p->__pyx_v_soil_water) { + e = (*v)(p->__pyx_v_soil_water, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_10LAIProcess___pyx_scope_struct_2_processs_WMCModel(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *p = (struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel *)o; + tmp = ((PyObject*)p->__pyx_v_inc_angle); + p->__pyx_v_inc_angle = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->__pyx_v_param_arr); + p->__pyx_v_param_arr = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->__pyx_v_sigma); + p->__pyx_v_sigma = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->__pyx_v_soil_water); + p->__pyx_v_soil_water = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyTypeObject __pyx_type_10LAIProcess___pyx_scope_struct_2_processs_WMCModel = { + PyVarObject_HEAD_INIT(0, 0) + "LAIProcess.__pyx_scope_struct_2_processs_WMCModel", /*tp_name*/ + sizeof(struct __pyx_obj_10LAIProcess___pyx_scope_struct_2_processs_WMCModel), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_10LAIProcess___pyx_scope_struct_2_processs_WMCModel, /*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_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_10LAIProcess___pyx_scope_struct_2_processs_WMCModel, /*tp_traverse*/ + __pyx_tp_clear_10LAIProcess___pyx_scope_struct_2_processs_WMCModel, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*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_10LAIProcess___pyx_scope_struct_2_processs_WMCModel, /*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[] = { + {"process_tiff", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_10LAIProcess_9process_tiff, METH_VARARGS|METH_KEYWORDS, 0}, + {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_LAIProcess(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_LAIProcess}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "LAIProcess", + 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_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 0, 1, 1}, + {&__pyx_n_s_B, __pyx_k_B, sizeof(__pyx_k_B), 0, 0, 1, 1}, + {&__pyx_n_s_C, __pyx_k_C, sizeof(__pyx_k_C), 0, 0, 1, 1}, + {&__pyx_n_s_D, __pyx_k_D, sizeof(__pyx_k_D), 0, 0, 1, 1}, + {&__pyx_n_s_FVC, __pyx_k_FVC, sizeof(__pyx_k_FVC), 0, 0, 1, 1}, + {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, + {&__pyx_n_s_LAIProcess, __pyx_k_LAIProcess, sizeof(__pyx_k_LAIProcess), 0, 0, 1, 1}, + {&__pyx_kp_s_LAIProcess_pyx, __pyx_k_LAIProcess_pyx, sizeof(__pyx_k_LAIProcess_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_M, __pyx_k_M, sizeof(__pyx_k_M), 0, 0, 1, 1}, + {&__pyx_n_s_N, __pyx_k_N, sizeof(__pyx_k_N), 0, 0, 1, 1}, + {&__pyx_n_s_V_lai, __pyx_k_V_lai, sizeof(__pyx_k_V_lai), 0, 0, 1, 1}, + {&__pyx_n_s_WMCModel, __pyx_k_WMCModel, sizeof(__pyx_k_WMCModel), 0, 0, 1, 1}, + {&__pyx_n_s_X, __pyx_k_X, sizeof(__pyx_k_X), 0, 0, 1, 1}, + {&__pyx_n_s_X0, __pyx_k_X0, sizeof(__pyx_k_X0), 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_cos, __pyx_k_cos, sizeof(__pyx_k_cos), 0, 0, 1, 1}, + {&__pyx_n_s_csv_sigma, __pyx_k_csv_sigma, sizeof(__pyx_k_csv_sigma), 0, 0, 1, 1}, + {&__pyx_n_s_dpi, __pyx_k_dpi, sizeof(__pyx_k_dpi), 0, 0, 1, 1}, + {&__pyx_n_s_draw_flag, __pyx_k_draw_flag, sizeof(__pyx_k_draw_flag), 0, 0, 1, 1}, + {&__pyx_n_s_eqs, __pyx_k_eqs, sizeof(__pyx_k_eqs), 0, 0, 1, 1}, + {&__pyx_kp_s_equation_err, __pyx_k_equation_err, sizeof(__pyx_k_equation_err), 0, 0, 1, 0}, + {&__pyx_n_s_err, __pyx_k_err, sizeof(__pyx_k_err), 0, 0, 1, 1}, + {&__pyx_n_s_err_f, __pyx_k_err_f, sizeof(__pyx_k_err_f), 0, 0, 1, 1}, + {&__pyx_n_s_err_lai, __pyx_k_err_lai, sizeof(__pyx_k_err_lai), 0, 0, 1, 1}, + {&__pyx_n_s_exp, __pyx_k_exp, sizeof(__pyx_k_exp), 0, 0, 1, 1}, + {&__pyx_n_s_exp_gamma, __pyx_k_exp_gamma, sizeof(__pyx_k_exp_gamma), 0, 0, 1, 1}, + {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1}, + {&__pyx_n_s_f_veg, __pyx_k_f_veg, sizeof(__pyx_k_f_veg), 0, 0, 1, 1}, + {&__pyx_n_s_getLogger, __pyx_k_getLogger, sizeof(__pyx_k_getLogger), 0, 0, 1, 1}, + {&__pyx_n_s_h, __pyx_k_h, sizeof(__pyx_k_h), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_inc_angle, __pyx_k_inc_angle, sizeof(__pyx_k_inc_angle), 0, 0, 1, 1}, + {&__pyx_n_s_inc_tiff, __pyx_k_inc_tiff, sizeof(__pyx_k_inc_tiff), 0, 0, 1, 1}, + {&__pyx_n_s_lai, __pyx_k_lai, sizeof(__pyx_k_lai), 0, 0, 1, 1}, + {&__pyx_n_s_lai_X0, __pyx_k_lai_X0, sizeof(__pyx_k_lai_X0), 0, 0, 1, 1}, + {&__pyx_n_s_lai_waiter_inc_sigma_item, __pyx_k_lai_waiter_inc_sigma_item, sizeof(__pyx_k_lai_waiter_inc_sigma_item), 0, 0, 1, 1}, + {&__pyx_n_s_lai_waiter_inc_sigma_list, __pyx_k_lai_waiter_inc_sigma_list, sizeof(__pyx_k_lai_waiter_inc_sigma_list), 0, 0, 1, 1}, + {&__pyx_n_s_lai_water_inc_sigma_item, __pyx_k_lai_water_inc_sigma_item, sizeof(__pyx_k_lai_water_inc_sigma_item), 0, 0, 1, 1}, + {&__pyx_n_s_lai_water_inc_sigma_list, __pyx_k_lai_water_inc_sigma_list, sizeof(__pyx_k_lai_water_inc_sigma_list), 0, 0, 1, 1}, + {&__pyx_n_s_leastsq, __pyx_k_leastsq, sizeof(__pyx_k_leastsq), 0, 0, 1, 1}, + {&__pyx_n_s_logger, __pyx_k_logger, sizeof(__pyx_k_logger), 0, 0, 1, 1}, + {&__pyx_n_s_logging, __pyx_k_logging, sizeof(__pyx_k_logging), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_matplotlib, __pyx_k_matplotlib, sizeof(__pyx_k_matplotlib), 0, 0, 1, 1}, + {&__pyx_n_s_mylog, __pyx_k_mylog, sizeof(__pyx_k_mylog), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_nan, __pyx_k_nan, sizeof(__pyx_k_nan), 0, 0, 1, 1}, + {&__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_kp_s_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 0, 1, 0}, + {&__pyx_kp_s_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 0, 1, 0}, + {&__pyx_n_s_param_arr, __pyx_k_param_arr, sizeof(__pyx_k_param_arr), 0, 0, 1, 1}, + {&__pyx_n_s_params_X0, __pyx_k_params_X0, sizeof(__pyx_k_params_X0), 0, 0, 1, 1}, + {&__pyx_n_s_plt, __pyx_k_plt, sizeof(__pyx_k_plt), 0, 0, 1, 1}, + {&__pyx_n_s_processs_WMCModel, __pyx_k_processs_WMCModel, sizeof(__pyx_k_processs_WMCModel), 0, 0, 1, 1}, + {&__pyx_n_s_processs_WMCModel_locals_f, __pyx_k_processs_WMCModel_locals_f, sizeof(__pyx_k_processs_WMCModel_locals_f), 0, 0, 1, 1}, + {&__pyx_n_s_pyplot, __pyx_k_pyplot, sizeof(__pyx_k_pyplot), 0, 0, 1, 1}, + {&__pyx_n_s_random, __pyx_k_random, sizeof(__pyx_k_random), 0, 0, 1, 1}, + {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1}, + {&__pyx_n_s_sample_code, __pyx_k_sample_code, sizeof(__pyx_k_sample_code), 0, 0, 1, 1}, + {&__pyx_n_s_sample_inc, __pyx_k_sample_inc, sizeof(__pyx_k_sample_inc), 0, 0, 1, 1}, + {&__pyx_n_s_sample_lai, __pyx_k_sample_lai, sizeof(__pyx_k_sample_lai), 0, 0, 1, 1}, + {&__pyx_n_s_sample_lat, __pyx_k_sample_lat, sizeof(__pyx_k_sample_lat), 0, 0, 1, 1}, + {&__pyx_n_s_sample_lon, __pyx_k_sample_lon, sizeof(__pyx_k_sample_lon), 0, 0, 1, 1}, + {&__pyx_n_s_sample_sigma, __pyx_k_sample_sigma, sizeof(__pyx_k_sample_sigma), 0, 0, 1, 1}, + {&__pyx_n_s_sample_soil, __pyx_k_sample_soil, sizeof(__pyx_k_sample_soil), 0, 0, 1, 1}, + {&__pyx_n_s_sample_time, __pyx_k_sample_time, sizeof(__pyx_k_sample_time), 0, 0, 1, 1}, + {&__pyx_n_s_savefig, __pyx_k_savefig, sizeof(__pyx_k_savefig), 0, 0, 1, 1}, + {&__pyx_n_s_scatter, __pyx_k_scatter, sizeof(__pyx_k_scatter), 0, 0, 1, 1}, + {&__pyx_n_s_scipy_optimize, __pyx_k_scipy_optimize, sizeof(__pyx_k_scipy_optimize), 0, 0, 1, 1}, + {&__pyx_n_s_show, __pyx_k_show, sizeof(__pyx_k_show), 0, 0, 1, 1}, + {&__pyx_n_s_sigma, __pyx_k_sigma, sizeof(__pyx_k_sigma), 0, 0, 1, 1}, + {&__pyx_n_s_sigma_soil, __pyx_k_sigma_soil, sizeof(__pyx_k_sigma_soil), 0, 0, 1, 1}, + {&__pyx_n_s_sigma_tiff, __pyx_k_sigma_tiff, sizeof(__pyx_k_sigma_tiff), 0, 0, 1, 1}, + {&__pyx_n_s_sigma_veg, __pyx_k_sigma_veg, sizeof(__pyx_k_sigma_veg), 0, 0, 1, 1}, + {&__pyx_n_s_soil_water, __pyx_k_soil_water, sizeof(__pyx_k_soil_water), 0, 0, 1, 1}, + {&__pyx_n_s_soil_water_tiff, __pyx_k_soil_water_tiff, sizeof(__pyx_k_soil_water_tiff), 0, 0, 1, 1}, + {&__pyx_n_s_temp_err, __pyx_k_temp_err, sizeof(__pyx_k_temp_err), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_test_WMCModel, __pyx_k_test_WMCModel, sizeof(__pyx_k_test_WMCModel), 0, 0, 1, 1}, + {&__pyx_n_s_test_WMCModel_locals_f, __pyx_k_test_WMCModel_locals_f, sizeof(__pyx_k_test_WMCModel_locals_f), 0, 0, 1, 1}, + {&__pyx_n_s_test_err_image_path, __pyx_k_test_err_image_path, sizeof(__pyx_k_test_err_image_path), 0, 0, 1, 1}, + {&__pyx_n_s_title, __pyx_k_title, sizeof(__pyx_k_title), 0, 0, 1, 1}, + {&__pyx_n_s_train_WMCmodel, __pyx_k_train_WMCmodel, sizeof(__pyx_k_train_WMCmodel), 0, 0, 1, 1}, + {&__pyx_n_s_train_WMCmodel_locals_f, __pyx_k_train_WMCmodel_locals_f, sizeof(__pyx_k_train_WMCmodel_locals_f), 0, 0, 1, 1}, + {&__pyx_n_s_train_err_image_path, __pyx_k_train_err_image_path, sizeof(__pyx_k_train_err_image_path), 0, 0, 1, 1}, + {&__pyx_n_s_x_arr, __pyx_k_x_arr, sizeof(__pyx_k_x_arr), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 947, __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); + + /* "LAIProcess.pyx":48 + * lai_waiter_inc_sigma_list (list): + * """ + * def f(X): # <<<<<<<<<<<<<< + * eqs=[] + * for lai_water_inc_sigma_item in lai_water_inc_sigma_list: + */ + __pyx_tuple_ = PyTuple_Pack(8, __pyx_n_s_X, __pyx_n_s_eqs, __pyx_n_s_lai_water_inc_sigma_item, __pyx_n_s_sample_lai, __pyx_n_s_sample_sigma, __pyx_n_s_sample_soil, __pyx_n_s_sample_inc, __pyx_n_s_FVC); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple_, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_LAIProcess_pyx, __pyx_n_s_f, 48, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 48, __pyx_L1_error) + + /* "LAIProcess.pyx":104 + * for lai_waiter_inc_sigma_item in lai_waiter_inc_sigma_list: + * sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=lai_waiter_inc_sigma_item + * def f(X): # <<<<<<<<<<<<<< + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,sample_soil,sample_inc,csv_sigma)] + */ + __pyx_tuple__3 = PyTuple_Pack(3, __pyx_n_s_X, __pyx_n_s_lai, __pyx_n_s_eqs); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__3, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_LAIProcess_pyx, __pyx_n_s_f, 104, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(0, 104, __pyx_L1_error) + + /* "LAIProcess.pyx":134 + * if(sigma<0 ): + * return np.nan + * def f(X): # <<<<<<<<<<<<<< + * lai=X[0] + * eqs=[WMCModel(param_arr,lai,soil_water,inc_angle,sigma )] + */ + __pyx_tuple__5 = PyTuple_Pack(3, __pyx_n_s_X, __pyx_n_s_lai, __pyx_n_s_eqs); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__5, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_LAIProcess_pyx, __pyx_n_s_f, 134, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) __PYX_ERR(0, 134, __pyx_L1_error) + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":947 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 947, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":953 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 953, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "LAIProcess.pyx":12 + * import random + * import logging + * logger = logging.getLogger("mylog") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__9 = PyTuple_Pack(1, __pyx_n_s_mylog); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + + /* "LAIProcess.pyx":15 + * + * + * def WMCModel(param_arr,sample_lai,sample_soil,sample_inc,sample_sigma): # <<<<<<<<<<<<<< + * """ WMC + * + */ + __pyx_tuple__10 = PyTuple_Pack(17, __pyx_n_s_param_arr, __pyx_n_s_sample_lai, __pyx_n_s_sample_soil, __pyx_n_s_sample_inc, __pyx_n_s_sample_sigma, __pyx_n_s_A, __pyx_n_s_B, __pyx_n_s_C, __pyx_n_s_D, __pyx_n_s_M, __pyx_n_s_N, __pyx_n_s_V_lai, __pyx_n_s_exp_gamma, __pyx_n_s_sigma_soil, __pyx_n_s_sigma_veg, __pyx_n_s_f_veg, __pyx_n_s_result); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__10); + __Pyx_GIVEREF(__pyx_tuple__10); + __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(5, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__10, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_LAIProcess_pyx, __pyx_n_s_WMCModel, 15, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) __PYX_ERR(0, 15, __pyx_L1_error) + + /* "LAIProcess.pyx":42 + * + * + * def train_WMCmodel(lai_water_inc_sigma_list,params_X0,train_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ + __pyx_tuple__12 = PyTuple_Pack(12, __pyx_n_s_lai_water_inc_sigma_list, __pyx_n_s_params_X0, __pyx_n_s_train_err_image_path, __pyx_n_s_draw_flag, __pyx_n_s_f, __pyx_n_s_f, __pyx_n_s_X0, __pyx_n_s_h, __pyx_n_s_err_f, __pyx_n_s_x_arr, __pyx_n_s_plt, __pyx_n_s_lai_waiter_inc_sigma_item); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_GIVEREF(__pyx_tuple__12); + __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_LAIProcess_pyx, __pyx_n_s_train_WMCmodel, 42, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) __PYX_ERR(0, 42, __pyx_L1_error) + + /* "LAIProcess.pyx":82 + * return h[0] + * + * def test_WMCModel(lai_waiter_inc_sigma_list,param_arr,lai_X0,test_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ + __pyx_tuple__14 = PyTuple_Pack(25, __pyx_n_s_lai_waiter_inc_sigma_list, __pyx_n_s_param_arr, __pyx_n_s_lai_X0, __pyx_n_s_test_err_image_path, __pyx_n_s_draw_flag, __pyx_n_s_err, __pyx_n_s_err_f, __pyx_n_s_x_arr, __pyx_n_s_err_lai, __pyx_n_s_lai_waiter_inc_sigma_item, __pyx_n_s_sample_time, __pyx_n_s_sample_code, __pyx_n_s_sample_lon, __pyx_n_s_sample_lat, __pyx_n_s_sample_lai, __pyx_n_s_csv_sigma, __pyx_n_s_sample_soil, __pyx_n_s_sample_inc, __pyx_n_s_sample_sigma, __pyx_n_s_f, __pyx_n_s_f, __pyx_n_s_X0, __pyx_n_s_h, __pyx_n_s_temp_err, __pyx_n_s_plt); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); + __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(5, 0, 25, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_LAIProcess_pyx, __pyx_n_s_test_WMCModel, 82, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) __PYX_ERR(0, 82, __pyx_L1_error) + + /* "LAIProcess.pyx":130 + * return err + * + * def processs_WMCModel(param_arr,lai_X0,sigma,inc_angle,soil_water): # <<<<<<<<<<<<<< + * + * if(sigma<0 ): + */ + __pyx_tuple__16 = PyTuple_Pack(8, __pyx_n_s_param_arr, __pyx_n_s_lai_X0, __pyx_n_s_sigma, __pyx_n_s_inc_angle, __pyx_n_s_soil_water, __pyx_n_s_f, __pyx_n_s_f, __pyx_n_s_h); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__16); + __Pyx_GIVEREF(__pyx_tuple__16); + __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(5, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_LAIProcess_pyx, __pyx_n_s_processs_WMCModel, 130, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) __PYX_ERR(0, 130, __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_600 = PyInt_FromLong(600); if (unlikely(!__pyx_int_600)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_neg_2 = PyInt_FromLong(-2); if (unlikely(!__pyx_int_neg_2)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + 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_10LAIProcess___pyx_scope_struct__train_WMCmodel) < 0) __PYX_ERR(0, 42, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_10LAIProcess___pyx_scope_struct__train_WMCmodel.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_10LAIProcess___pyx_scope_struct__train_WMCmodel.tp_dictoffset && __pyx_type_10LAIProcess___pyx_scope_struct__train_WMCmodel.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_10LAIProcess___pyx_scope_struct__train_WMCmodel.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + __pyx_ptype_10LAIProcess___pyx_scope_struct__train_WMCmodel = &__pyx_type_10LAIProcess___pyx_scope_struct__train_WMCmodel; + if (PyType_Ready(&__pyx_type_10LAIProcess___pyx_scope_struct_1_test_WMCModel) < 0) __PYX_ERR(0, 82, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_10LAIProcess___pyx_scope_struct_1_test_WMCModel.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_10LAIProcess___pyx_scope_struct_1_test_WMCModel.tp_dictoffset && __pyx_type_10LAIProcess___pyx_scope_struct_1_test_WMCModel.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_10LAIProcess___pyx_scope_struct_1_test_WMCModel.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + __pyx_ptype_10LAIProcess___pyx_scope_struct_1_test_WMCModel = &__pyx_type_10LAIProcess___pyx_scope_struct_1_test_WMCModel; + if (PyType_Ready(&__pyx_type_10LAIProcess___pyx_scope_struct_2_processs_WMCModel) < 0) __PYX_ERR(0, 130, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_10LAIProcess___pyx_scope_struct_2_processs_WMCModel.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_10LAIProcess___pyx_scope_struct_2_processs_WMCModel.tp_dictoffset && __pyx_type_10LAIProcess___pyx_scope_struct_2_processs_WMCModel.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_10LAIProcess___pyx_scope_struct_2_processs_WMCModel.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + __pyx_ptype_10LAIProcess___pyx_scope_struct_2_processs_WMCModel = &__pyx_type_10LAIProcess___pyx_scope_struct_2_processs_WMCModel; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 + sizeof(PyTypeObject), + #else + sizeof(PyHeapTypeObject), + #endif + __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 200, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_5numpy_dtype = __Pyx_ImportType(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __Pyx_ImportType_CheckSize_Ignore); + if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(1, 200, __pyx_L1_error) + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __Pyx_ImportType_CheckSize_Ignore); + if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(1, 223, __pyx_L1_error) + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __Pyx_ImportType_CheckSize_Ignore); + if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(1, 227, __pyx_L1_error) + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __Pyx_ImportType_CheckSize_Ignore); + if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(1, 239, __pyx_L1_error) + __pyx_ptype_5numpy_generic = __Pyx_ImportType(__pyx_t_1, "numpy", "generic", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_generic) __PYX_ERR(1, 771, __pyx_L1_error) + __pyx_ptype_5numpy_number = __Pyx_ImportType(__pyx_t_1, "numpy", "number", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_number) __PYX_ERR(1, 773, __pyx_L1_error) + __pyx_ptype_5numpy_integer = __Pyx_ImportType(__pyx_t_1, "numpy", "integer", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_integer) __PYX_ERR(1, 775, __pyx_L1_error) + __pyx_ptype_5numpy_signedinteger = __Pyx_ImportType(__pyx_t_1, "numpy", "signedinteger", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_signedinteger) __PYX_ERR(1, 777, __pyx_L1_error) + __pyx_ptype_5numpy_unsignedinteger = __Pyx_ImportType(__pyx_t_1, "numpy", "unsignedinteger", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_unsignedinteger) __PYX_ERR(1, 779, __pyx_L1_error) + __pyx_ptype_5numpy_inexact = __Pyx_ImportType(__pyx_t_1, "numpy", "inexact", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_inexact) __PYX_ERR(1, 781, __pyx_L1_error) + __pyx_ptype_5numpy_floating = __Pyx_ImportType(__pyx_t_1, "numpy", "floating", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_floating) __PYX_ERR(1, 783, __pyx_L1_error) + __pyx_ptype_5numpy_complexfloating = __Pyx_ImportType(__pyx_t_1, "numpy", "complexfloating", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_complexfloating) __PYX_ERR(1, 785, __pyx_L1_error) + __pyx_ptype_5numpy_flexible = __Pyx_ImportType(__pyx_t_1, "numpy", "flexible", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_flexible) __PYX_ERR(1, 787, __pyx_L1_error) + __pyx_ptype_5numpy_character = __Pyx_ImportType(__pyx_t_1, "numpy", "character", sizeof(PyObject), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_5numpy_character) __PYX_ERR(1, 789, __pyx_L1_error) + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __Pyx_ImportType_CheckSize_Ignore); + if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(1, 827, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#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 initLAIProcess(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initLAIProcess(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_LAIProcess(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_LAIProcess(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_LAIProcess(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + 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 'LAIProcess' 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_LAIProcess(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(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #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("LAIProcess", __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_LAIProcess) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "LAIProcess")) { + if (unlikely(PyDict_SetItemString(modules, "LAIProcess", __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) + if (unlikely(__Pyx_modinit_type_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "LAIProcess.pyx":6 + * import cython + * cimport cython # + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as np + * from libc.math cimport pi + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); 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; + + /* "LAIProcess.pyx":9 + * cimport numpy as np + * from libc.math cimport pi + * from scipy.optimize import leastsq # <<<<<<<<<<<<<< + * import random + * import logging + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_leastsq); + __Pyx_GIVEREF(__pyx_n_s_leastsq); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_leastsq); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_scipy_optimize, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __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_leastsq); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_leastsq, __pyx_t_1) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "LAIProcess.pyx":10 + * from libc.math cimport pi + * from scipy.optimize import leastsq + * import random # <<<<<<<<<<<<<< + * import logging + * logger = logging.getLogger("mylog") + */ + __pyx_t_2 = __Pyx_Import(__pyx_n_s_random, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_random, __pyx_t_2) < 0) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "LAIProcess.pyx":11 + * from scipy.optimize import leastsq + * import random + * import logging # <<<<<<<<<<<<<< + * logger = logging.getLogger("mylog") + * + */ + __pyx_t_2 = __Pyx_Import(__pyx_n_s_logging, 0, -1); 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_logging, __pyx_t_2) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "LAIProcess.pyx":12 + * import random + * import logging + * logger = logging.getLogger("mylog") # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_logging); 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_getLogger); 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_Call(__pyx_t_1, __pyx_tuple__9, NULL); 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; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_logger, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "LAIProcess.pyx":15 + * + * + * def WMCModel(param_arr,sample_lai,sample_soil,sample_inc,sample_sigma): # <<<<<<<<<<<<<< + * """ WMC + * + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_10LAIProcess_1WMCModel, NULL, __pyx_n_s_LAIProcess); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_WMCModel, __pyx_t_2) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "LAIProcess.pyx":42 + * + * + * def train_WMCmodel(lai_water_inc_sigma_list,params_X0,train_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_10LAIProcess_3train_WMCmodel, NULL, __pyx_n_s_LAIProcess); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_train_WMCmodel, __pyx_t_2) < 0) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "LAIProcess.pyx":82 + * return h[0] + * + * def test_WMCModel(lai_waiter_inc_sigma_list,param_arr,lai_X0,test_err_image_path,draw_flag=True): # <<<<<<<<<<<<<< + * """ + * + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_10LAIProcess_5test_WMCModel, NULL, __pyx_n_s_LAIProcess); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_WMCModel, __pyx_t_2) < 0) __PYX_ERR(0, 82, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "LAIProcess.pyx":130 + * return err + * + * def processs_WMCModel(param_arr,lai_X0,sigma,inc_angle,soil_water): # <<<<<<<<<<<<<< + * + * if(sigma<0 ): + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_10LAIProcess_7processs_WMCModel, NULL, __pyx_n_s_LAIProcess); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_processs_WMCModel, __pyx_t_2) < 0) __PYX_ERR(0, 130, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "LAIProcess.pyx":1 + * # # <<<<<<<<<<<<<< + * # + * # + */ + __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; + + /* "../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1016 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init LAIProcess", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init LAIProcess"); + } + __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; +} + +/* 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"); +} + +/* IterFinish */ +static CYTHON_INLINE int __Pyx_IterFinish(void) { +#if CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* exc_type = tstate->curexc_type; + if (unlikely(exc_type)) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) { + PyObject *exc_value, *exc_tb; + exc_value = tstate->curexc_value; + exc_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + Py_DECREF(exc_type); + Py_XDECREF(exc_value); + Py_XDECREF(exc_tb); + return 0; + } else { + return -1; + } + } + return 0; +#else + if (unlikely(PyErr_Occurred())) { + if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { + PyErr_Clear(); + return 0; + } else { + return -1; + } + } + return 0; +#endif +} + +/* UnpackItemEndCheck */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } else { + return __Pyx_IterFinish(); + } + 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; +} + +/* 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); +} + +/* 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 = Py_TYPE(func)->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 (__Pyx_PyFastCFunction_Check(func)) { + 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 + +/* PyIntBinop */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_SubtractCObj(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { + (void)inplace; + (void)zerodivision_check; + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op2))) { + const long a = intval; + long x; + long b = PyInt_AS_LONG(op2); + x = (long)((unsigned long)a - b); + if (likely((x^a) >= 0 || (x^~b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_subtract(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op2))) { + const long a = intval; + long b, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG lla = intval; + PY_LONG_LONG llb, llx; +#endif + const digit* digits = ((PyLongObject*)op2)->ob_digit; + const Py_ssize_t size = Py_SIZE(op2); + if (likely(__Pyx_sst_abs(size) <= 1)) { + b = likely(size) ? digits[0] : 0; + if (size == -1) b = -b; + } else { + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + b = -(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) { + llb = -(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) { + b = (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) { + llb = (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) { + b = -(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) { + llb = -(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) { + b = (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) { + llb = (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) { + b = -(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) { + llb = -(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) { + b = (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) { + llb = (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_subtract(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(op2)) { + const long a = intval; + double b = PyFloat_AS_DOUBLE(op2); + double result; + PyFPE_START_PROTECT("subtract", return NULL) + result = ((double)a) - (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceSubtract : PyNumber_Subtract)(op1, op2); +} +#endif + +/* None */ +static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname) { + PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname); +} + +/* 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)); +} + +/* 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 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#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; +} + +/* 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; +} + +/* 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 + +/* 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; + } + } + } +} + +/* BufferGetAndValidate */ + static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { + if (unlikely(info->buf == NULL)) return; + if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; + __Pyx_ReleaseBuffer(info); +} +static void __Pyx_ZeroBuffer(Py_buffer* buf) { + buf->buf = NULL; + buf->obj = NULL; + buf->strides = __Pyx_zeros; + buf->shape = __Pyx_zeros; + buf->suboffsets = __Pyx_minusones; +} +static int __Pyx__GetBufferAndValidate( + Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, + int nd, int cast, __Pyx_BufFmt_StackElem* stack) +{ + buf->buf = NULL; + if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) { + __Pyx_ZeroBuffer(buf); + return -1; + } + if (unlikely(buf->ndim != nd)) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + nd, buf->ndim); + goto fail; + } + if (!cast) { + __Pyx_BufFmt_Context ctx; + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; + } + if (unlikely((size_t)buf->itemsize != dtype->size)) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", + buf->itemsize, (buf->itemsize > 1) ? "s" : "", + dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; + return 0; +fail:; + __Pyx_SafeReleaseBuffer(buf); + return -1; +} + +/* BufferIndexError */ + static void __Pyx_RaiseBufferIndexError(int axis) { + PyErr_Format(PyExc_IndexError, + "Out of bounds on buffer access (axis %d)", axis); +} + +/* 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 + +/* 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; +} + +/* 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 + +/* 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 + +/* 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; +} + +/* 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 + +/* 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 + +/* TypeImport */ + #ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, + size_t size, enum __Pyx_ImportType_CheckSize check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; +#ifdef Py_LIMITED_API + PyObject *py_basicsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#ifndef Py_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if ((size_t)basicsize < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* 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); + 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 + + + /* Declarations */ + #if CYTHON_CCOMPLEX + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return ::std::complex< float >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return x + y*(__pyx_t_float_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + __pyx_t_float_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +/* Arithmetic */ + #if CYTHON_CCOMPLEX +#else + static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + #if 1 + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabsf(b.real) >= fabsf(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + float r = b.imag / b.real; + float s = (float)(1.0) / (b.real + b.imag * r); + return __pyx_t_float_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + float r = b.real / b.imag; + float s = (float)(1.0) / (b.imag + b.real * r); + return __pyx_t_float_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } + } + #else + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + float denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_float_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } + } + #endif + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrtf(z.real*z.real + z.imag*z.imag); + #else + return hypotf(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + float denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_float(a, a); + case 3: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, a); + case 4: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if (b.imag == 0) { + z.real = powf(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2f(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_float(a); + theta = atan2f(a.imag, a.real); + } + lnr = logf(r); + z_r = expf(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cosf(z_theta); + z.imag = z_r * sinf(z_theta); + return z; + } + #endif +#endif + +/* 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 + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* CIntFromPyVerify */ + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntFromPy */ + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(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 int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } 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; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; ip) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/tool/LAI/build/temp.win-amd64-3.8/Release/build/LAIProcess.cp38-win_amd64.exp b/tool/LAI/build/temp.win-amd64-3.8/Release/build/LAIProcess.cp38-win_amd64.exp new file mode 100644 index 0000000000000000000000000000000000000000..8d773ec6bc1a2bdac41dadcea6affbeb87210983 GIT binary patch literal 763 zcmZWn!EVz)5S=7I0U^{}Dh?n;B8MXIV#iUGB9PL;frvIlF{(JMR5{*lwXG9d-gT4m z0bKa6a^+X}0(fi3O`s#s%-g5gneonu?{)eE@#;hmsT3wfXu{P2ZVDC9>lJkmet?e& zInB@7!HTBWHKICnQwFqsV9&Nj#oLfdEAC%^xIY|cNhGyqQR?@dg_@s)Gtuj^^h(h9 zYB*QsWF170aQzOnK~G`t7N`YlJ8e)KcB??Uun!9K3if`1?7iR6=V$tkw?Y}oM3;#O_Id6GRdX1(d%T#O6OtR z3QR6k!Y_5l_4fGjd;SGCG(QRey)NtQG2iukpHJ1Ce@wLb+VAmYughaKzhE{gJ)wTn zj_CGN526IGq6Ge;W=Gnf!Kn-lbKPycXUS|Xkj>Jd%~ipsfzjVa;S7~JIF&KkS$c^B o*&$U-8D)o6F^kU`cG10I+9Ma@(fEb|D3-x`D|Om|z5OSD0b8e?HUIzs literal 0 HcmV?d00001 diff --git a/tool/LAI/build/temp.win-amd64-3.8/Release/build/LAIProcess.cp38-win_amd64.lib b/tool/LAI/build/temp.win-amd64-3.8/Release/build/LAIProcess.cp38-win_amd64.lib new file mode 100644 index 0000000000000000000000000000000000000000..1938c720506fb5edb78ee201626d7e8b356964ef GIT binary patch literal 2052 zcmcgtJ8#oa6#n9b79xbgV+}G=Bw%Qq=A|GZZVbe%ucWa^^hjYqg5xCsuL4P zFfg<52iU4^6=LZ>U}OXd7N&BJ?VCC@acc?XN;mhM<8vS1cfWIU=V7aFZa#`D@?=|D zp7e#6@r>n?u$plImjFozVh6y&0UynitUTR#Qq!vS^_roVwQ9d>wg-c> z*~^udcI+*q)v=0s7)GU`>u0Cn)yz5WjQX=iWz|?I*UPBxYFqZuw+XFkcY4Ozcxb#2 zPVvSFur2`yWH8#jMTY>y5P?L$(W&S7FI>!m6M`en1*9xD;xGV#kTZMC0|UZyr&4`Ac9aJ*4P;&IxxTEkWk3tU4IN242S zw%P9vx-W+Ez1n?Q*D9;t_le;ud3-ePR6358pkJybiUsZq)$De9gy(1!iJYAH*PzKH zLhgbV6>uPJiiksiyR(;*=Ny`ZaZceh!tpV;Wb^8PACiP^ip;;<<6#w-EtY(WlTiBe z;rCZMx(jK#;w(n%Yd*#0M3@!#SvcOvikp*?E~17c9c$(j82d`|sQD Per6mdVpINof*+H=CNh@{ literal 0 HcmV?d00001 diff --git a/tool/LAI/build/temp.win-amd64-3.8/Release/build/LAIProcess.obj b/tool/LAI/build/temp.win-amd64-3.8/Release/build/LAIProcess.obj new file mode 100644 index 0000000000000000000000000000000000000000..85b20debe474cff728ea7ee18827f789ace7be50 GIT binary patch literal 600245 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

@?Ak2DE}&tjsbSYGfnoR@p@E*( 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ÐQa-cdqREd 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 WPr%g3zTl)EFsqN7`SgEk!~X-~23Pn1 literal 0 HcmV?d00001 diff --git a/tool/LAI/setup.py b/tool/LAI/setup.py new file mode 100644 index 00000000..67c737a4 --- /dev/null +++ b/tool/LAI/setup.py @@ -0,0 +1,45 @@ +from setuptools import setup +from setuptools.extension import Extension +from Cython.Distutils import build_ext +from Cython.Build import cythonize +import numpy +from pathlib import Path +import shutil + + +class MyBuildExt(build_ext): + def run(self): + build_ext.run(self) + + build_dir = Path(self.build_lib) + root_dir = Path(__file__).parent + target_dir = build_dir if not self.inplace else root_dir + + self.copy_file(Path('./LAIProcess') / '__init__.py', root_dir, target_dir) + #self.copy_file(Path('./pkg2') / '__init__.py', root_dir, target_dir) + self.copy_file(Path('.') / '__init__.py', root_dir, target_dir) + def copy_file(self, path, source_dir, destination_dir): + if not (source_dir / path).exists(): + return + shutil.copyfile(str(source_dir / path), str(destination_dir / path)) + +setup( + name="MyModule", + ext_modules=cythonize( + [ + #Extension("pkg1.*", ["root/pkg1/*.py"]), + Extension("pkg2.*", ["./LAIProcess.pyx"]), + #Extension("1.*", ["root/*.py"]) + ], + build_dir="build", + compiler_directives=dict( + always_allow_keywords=True + )), + cmdclass=dict( + build_ext=MyBuildExt + ), + packages=[], + include_dirs=[numpy.get_include()], +) + +# 指令: python setup.py build_ext --inplace diff --git a/tool/algorithm/transforml1a/build/SAR_geo/SAR_GEO.c b/tool/algorithm/transforml1a/build/SAR_geo/SAR_GEO.c new file mode 100644 index 00000000..626b2eda --- /dev/null +++ b/tool/algorithm/transforml1a/build/SAR_geo/SAR_GEO.c @@ -0,0 +1,9744 @@ +/* Generated by Cython 0.29.24 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "depends": [], + "name": "SAR_GEO", + "sources": [ + "./SAR_geo/SAR_GEO.pyx" + ] + }, + "module_name": "SAR_GEO" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* 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_24" +#define CYTHON_HEX_VERSION 0x001D18F0 +#define CYTHON_FUTURE_DIVISION 0 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if defined(PyUnicode_IS_READY) + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #else + #define __Pyx_PyUnicode_READY(op) (0) + #endif + #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) + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #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__SAR_GEO +#define __PYX_HAVE_API__SAR_GEO +/* Early includes */ +#include +#include +#include "numpy/arrayobject.h" +#include "numpy/ndarrayobject.h" +#include "numpy/ndarraytypes.h" +#include "numpy/arrayscalars.h" +#include "numpy/ufuncobject.h" + + /* NumPy API declarations from "numpy/__init__.pxd" */ + +#include +#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[] = { + "SAR_geo\\SAR_GEO.pyx", + "__init__.pxd", + "type.pxd", +}; +/* 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; + + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":690 + * # in Cython to enable them only on the right systems. + * + * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + */ +typedef npy_int8 __pyx_t_5numpy_int8_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":691 + * + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t + */ +typedef npy_int16 __pyx_t_5numpy_int16_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":692 + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< + * ctypedef npy_int64 int64_t + * #ctypedef npy_int96 int96_t + */ +typedef npy_int32 __pyx_t_5numpy_int32_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":693 + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< + * #ctypedef npy_int96 int96_t + * #ctypedef npy_int128 int128_t + */ +typedef npy_int64 __pyx_t_5numpy_int64_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":697 + * #ctypedef npy_int128 int128_t + * + * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + */ +typedef npy_uint8 __pyx_t_5numpy_uint8_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":698 + * + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t + */ +typedef npy_uint16 __pyx_t_5numpy_uint16_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":699 + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< + * ctypedef npy_uint64 uint64_t + * #ctypedef npy_uint96 uint96_t + */ +typedef npy_uint32 __pyx_t_5numpy_uint32_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":700 + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< + * #ctypedef npy_uint96 uint96_t + * #ctypedef npy_uint128 uint128_t + */ +typedef npy_uint64 __pyx_t_5numpy_uint64_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":704 + * #ctypedef npy_uint128 uint128_t + * + * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< + * ctypedef npy_float64 float64_t + * #ctypedef npy_float80 float80_t + */ +typedef npy_float32 __pyx_t_5numpy_float32_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":705 + * + * ctypedef npy_float32 float32_t + * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< + * #ctypedef npy_float80 float80_t + * #ctypedef npy_float128 float128_t + */ +typedef npy_float64 __pyx_t_5numpy_float64_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":714 + * # The int types are mapped a bit surprising -- + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t + */ +typedef npy_long __pyx_t_5numpy_int_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":715 + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong longlong_t + * + */ +typedef npy_longlong __pyx_t_5numpy_long_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":716 + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_ulong uint_t + */ +typedef npy_longlong __pyx_t_5numpy_longlong_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":718 + * ctypedef npy_longlong longlong_t + * + * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t + */ +typedef npy_ulong __pyx_t_5numpy_uint_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":719 + * + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulonglong_t + * + */ +typedef npy_ulonglong __pyx_t_5numpy_ulong_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":720 + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_intp intp_t + */ +typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":722 + * ctypedef npy_ulonglong ulonglong_t + * + * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< + * ctypedef npy_uintp uintp_t + * + */ +typedef npy_intp __pyx_t_5numpy_intp_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":723 + * + * ctypedef npy_intp intp_t + * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< + * + * ctypedef npy_double float_t + */ +typedef npy_uintp __pyx_t_5numpy_uintp_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":725 + * ctypedef npy_uintp uintp_t + * + * ctypedef npy_double float_t # <<<<<<<<<<<<<< + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t + */ +typedef npy_double __pyx_t_5numpy_float_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":726 + * + * ctypedef npy_double float_t + * ctypedef npy_double double_t # <<<<<<<<<<<<<< + * ctypedef npy_longdouble longdouble_t + * + */ +typedef npy_double __pyx_t_5numpy_double_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":727 + * ctypedef npy_double float_t + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cfloat cfloat_t + */ +typedef npy_longdouble __pyx_t_5numpy_longdouble_t; +/* Declarations.proto */ +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< float > __pyx_t_float_complex; + #else + typedef float _Complex __pyx_t_float_complex; + #endif +#else + typedef struct { float real, imag; } __pyx_t_float_complex; +#endif +static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); + +/* 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 ---*/ + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":729 + * ctypedef npy_longdouble longdouble_t + * + * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t + */ +typedef npy_cfloat __pyx_t_5numpy_cfloat_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":730 + * + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< + * ctypedef npy_clongdouble clongdouble_t + * + */ +typedef npy_cdouble __pyx_t_5numpy_cdouble_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":731 + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cdouble complex_t + */ +typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":733 + * ctypedef npy_clongdouble clongdouble_t + * + * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew1(a): + */ +typedef npy_cdouble __pyx_t_5numpy_complex_t; +struct __pyx_t_7SAR_GEO_Point; + +/* "SAR_GEO.pyx":15 + * # + * #################### + * cdef struct Point: # # <<<<<<<<<<<<<< + * double x + * double y + */ +struct __pyx_t_7SAR_GEO_Point { + double x; + double y; +}; + +/* --- 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) + +/* 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); + +/* BufferGetAndValidate.proto */ +#define __Pyx_GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)\ + ((obj == Py_None || obj == NULL) ?\ + (__Pyx_ZeroBuffer(buf), 0) :\ + __Pyx__GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)) +static int __Pyx__GetBufferAndValidate(Py_buffer* buf, PyObject* obj, + __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); +static void __Pyx_ZeroBuffer(Py_buffer* buf); +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); +static Py_ssize_t __Pyx_minusones[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; +static Py_ssize_t __Pyx_zeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + +/* BufferIndexError.proto */ +static void __Pyx_RaiseBufferIndexError(int axis); + +#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) +/* 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 + +/* WriteUnraisableException.proto */ +static void __Pyx_WriteUnraisable(const char *name, int clineno, + int lineno, const char *filename, + int full_traceback, int nogil); + +#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0) +/* 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); + +/* 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 + +/* 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 + +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +#define __Pyx_BufPtrStrided3d(type, buf, i0, s0, i1, s1, i2, s2) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2) +/* 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); + +/* 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 + +/* 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 + +/* 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 + +/* 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 + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto +#define __PYX_HAVE_RT_ImportType_proto +enum __Pyx_ImportType_CheckSize { + __Pyx_ImportType_CheckSize_Error = 0, + __Pyx_ImportType_CheckSize_Warn = 1, + __Pyx_ImportType_CheckSize_Ignore = 2 +}; +static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); +#endif + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* 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); + +/* 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; + +#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 + + +/* GCCDiagnostics.proto */ +#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* Print.proto */ +static int __Pyx_Print(PyObject*, PyObject *, int); +#if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3 +static PyObject* __pyx_print = 0; +static PyObject* __pyx_print_kwargs = 0; +#endif + +/* 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_float(a, b) ((a)==(b)) + #define __Pyx_c_sum_float(a, b) ((a)+(b)) + #define __Pyx_c_diff_float(a, b) ((a)-(b)) + #define __Pyx_c_prod_float(a, b) ((a)*(b)) + #define __Pyx_c_quot_float(a, b) ((a)/(b)) + #define __Pyx_c_neg_float(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero_float(z) ((z)==(float)0) + #define __Pyx_c_conj_float(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs_float(z) (::std::abs(z)) + #define __Pyx_c_pow_float(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero_float(z) ((z)==0) + #define __Pyx_c_conj_float(z) (conjf(z)) + #if 1 + #define __Pyx_c_abs_float(z) (cabsf(z)) + #define __Pyx_c_pow_float(a, b) (cpowf(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex); + static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex); + #if 1 + static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex); + #endif +#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 + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* PrintOne.proto */ +static int __Pyx_PrintOne(PyObject* stream, PyObject *o); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + + +/* Module declarations from 'cython' */ + +/* Module declarations from 'cpython.buffer' */ + +/* Module declarations from 'libc.string' */ + +/* Module declarations from 'libc.stdio' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.type' */ +static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; + +/* Module declarations from 'cpython' */ + +/* Module declarations from 'cpython.object' */ + +/* Module declarations from 'cpython.ref' */ + +/* Module declarations from 'cpython.mem' */ + +/* Module declarations from 'numpy' */ + +/* Module declarations from 'numpy' */ +static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; +static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; +static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; +static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; +static PyTypeObject *__pyx_ptype_5numpy_generic = 0; +static PyTypeObject *__pyx_ptype_5numpy_number = 0; +static PyTypeObject *__pyx_ptype_5numpy_integer = 0; +static PyTypeObject *__pyx_ptype_5numpy_signedinteger = 0; +static PyTypeObject *__pyx_ptype_5numpy_unsignedinteger = 0; +static PyTypeObject *__pyx_ptype_5numpy_inexact = 0; +static PyTypeObject *__pyx_ptype_5numpy_floating = 0; +static PyTypeObject *__pyx_ptype_5numpy_complexfloating = 0; +static PyTypeObject *__pyx_ptype_5numpy_flexible = 0; +static PyTypeObject *__pyx_ptype_5numpy_character = 0; +static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; + +/* Module declarations from 'libc.math' */ + +/* Module declarations from 'SAR_GEO' */ +static int __pyx_f_7SAR_GEO_rayCasting(struct __pyx_t_7SAR_GEO_Point, PyArrayObject *); /*proto*/ +static PyArrayObject *__pyx_f_7SAR_GEO_insert_data(PyArrayObject *, PyArrayObject *, PyArrayObject *, PyArrayObject *, int __pyx_skip_dispatch); /*proto*/ +static PyArrayObject *__pyx_f_7SAR_GEO_cut_L1A_img(PyArrayObject *, PyArrayObject *, int __pyx_skip_dispatch); /*proto*/ +static PyArrayObject *__pyx_f_7SAR_GEO_gereratorMask(PyArrayObject *, PyArrayObject *, PyArrayObject *, int __pyx_skip_dispatch); /*proto*/ +static PyArrayObject *__pyx_f_7SAR_GEO_get_r_c(PyArrayObject *, PyArrayObject *, int __pyx_skip_dispatch); /*proto*/ +static PyArrayObject *__pyx_f_7SAR_GEO_Add(PyArrayObject *, double, int __pyx_skip_dispatch); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 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 "SAR_GEO" +extern int __pyx_module_is_main_SAR_GEO; +int __pyx_module_is_main_SAR_GEO = 0; + +/* Implementation of 'SAR_GEO' */ +static PyObject *__pyx_builtin_ImportError; +static const char __pyx_k_a[] = "a"; +static const char __pyx_k_x[] = "x"; +static const char __pyx_k__4[] = "\350\260\203\347\224\250\346\210\220\345\212\237"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_os[] = "os"; +static const char __pyx_k_end[] = "end"; +static const char __pyx_k_max[] = "max"; +static const char __pyx_k_min[] = "min"; +static const char __pyx_k_nan[] = "nan"; +static const char __pyx_k_data[] = "data"; +static const char __pyx_k_file[] = "file"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mask[] = "mask"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_ones[] = "ones"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_clist[] = "clist"; +static const char __pyx_k_dtype[] = "dtype"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_print[] = "print"; +static const char __pyx_k_rlist[] = "rlist"; +static const char __pyx_k_zeros[] = "zeros"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_col_ids[] = "col_ids"; +static const char __pyx_k_float64[] = "float64"; +static const char __pyx_k_lon_lat[] = "lon_lat"; +static const char __pyx_k_ori2geo[] = "ori2geo"; +static const char __pyx_k_row_ids[] = "row_ids"; +static const char __pyx_k_griddata[] = "griddata"; +static const char __pyx_k_roi_list[] = "roi_list"; +static const char __pyx_k_ImportError[] = "ImportError"; +static const char __pyx_k_ori2geo_img[] = "ori2geo_img"; +static const char __pyx_k_scipy_interpolate[] = "scipy.interpolate"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import"; +static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import"; +static PyObject *__pyx_n_s_ImportError; +static PyObject *__pyx_kp_s__4; +static PyObject *__pyx_n_s_a; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_clist; +static PyObject *__pyx_n_s_col_ids; +static PyObject *__pyx_n_s_data; +static PyObject *__pyx_n_s_dtype; +static PyObject *__pyx_n_s_end; +static PyObject *__pyx_n_s_file; +static PyObject *__pyx_n_s_float64; +static PyObject *__pyx_n_s_griddata; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_lon_lat; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_mask; +static PyObject *__pyx_n_s_max; +static PyObject *__pyx_n_s_min; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_nan; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_numpy; +static PyObject *__pyx_kp_s_numpy_core_multiarray_failed_to; +static PyObject *__pyx_kp_s_numpy_core_umath_failed_to_impor; +static PyObject *__pyx_n_s_ones; +static PyObject *__pyx_n_s_ori2geo; +static PyObject *__pyx_n_s_ori2geo_img; +static PyObject *__pyx_n_s_os; +static PyObject *__pyx_n_s_print; +static PyObject *__pyx_n_s_rlist; +static PyObject *__pyx_n_s_roi_list; +static PyObject *__pyx_n_s_row_ids; +static PyObject *__pyx_n_s_scipy_interpolate; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_x; +static PyObject *__pyx_n_s_zeros; +static PyObject *__pyx_pf_7SAR_GEO_insert_data(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ori2geo_img, PyArrayObject *__pyx_v_row_ids, PyArrayObject *__pyx_v_col_ids, PyArrayObject *__pyx_v_data); /* proto */ +static PyObject *__pyx_pf_7SAR_GEO_2cut_L1A_img(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ori2geo_img, PyArrayObject *__pyx_v_roi_list); /* proto */ +static PyObject *__pyx_pf_7SAR_GEO_4gereratorMask(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_rlist, PyArrayObject *__pyx_v_clist, PyArrayObject *__pyx_v_mask); /* proto */ +static PyObject *__pyx_pf_7SAR_GEO_6get_r_c(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ori2geo, PyArrayObject *__pyx_v_lon_lat); /* proto */ +static PyObject *__pyx_pf_7SAR_GEO_8Add(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_a, double __pyx_v_x); /* proto */ +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_1; +static PyObject *__pyx_int_2; +static PyObject *__pyx_int_neg_1; +static PyObject *__pyx_slice_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__6; +/* Late includes */ + +/* "SAR_GEO.pyx":29 + * # + * ###################### + * cdef int rayCasting(Point p,np.ndarray[double,ndim=2] poly): # <<<<<<<<<<<<<< + * cdef double px = p.x, + * cdef double py = p.y, + */ + +static int __pyx_f_7SAR_GEO_rayCasting(struct __pyx_t_7SAR_GEO_Point __pyx_v_p, PyArrayObject *__pyx_v_poly) { + double __pyx_v_px; + double __pyx_v_py; + int __pyx_v_flag; + int __pyx_v_i; + int __pyx_v_l; + int __pyx_v_j; + double __pyx_v_sx; + double __pyx_v_sy; + double __pyx_v_tx; + double __pyx_v_ty; + PyObject *__pyx_v_x = 0; + __Pyx_LocalBuf_ND __pyx_pybuffernd_poly; + __Pyx_Buffer __pyx_pybuffer_poly; + int __pyx_r; + __Pyx_RefNannyDeclarations + double __pyx_t_1; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + Py_ssize_t __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + double __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("rayCasting", 0); + __pyx_pybuffer_poly.pybuffer.buf = NULL; + __pyx_pybuffer_poly.refcount = 0; + __pyx_pybuffernd_poly.data = NULL; + __pyx_pybuffernd_poly.rcbuffer = &__pyx_pybuffer_poly; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_poly.rcbuffer->pybuffer, (PyObject*)__pyx_v_poly, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 29, __pyx_L1_error) + } + __pyx_pybuffernd_poly.diminfo[0].strides = __pyx_pybuffernd_poly.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_poly.diminfo[0].shape = __pyx_pybuffernd_poly.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_poly.diminfo[1].strides = __pyx_pybuffernd_poly.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_poly.diminfo[1].shape = __pyx_pybuffernd_poly.rcbuffer->pybuffer.shape[1]; + + /* "SAR_GEO.pyx":30 + * ###################### + * cdef int rayCasting(Point p,np.ndarray[double,ndim=2] poly): + * cdef double px = p.x, # <<<<<<<<<<<<<< + * cdef double py = p.y, + * cdef int flag = 0 + */ + __pyx_t_1 = __pyx_v_p.x; + __pyx_v_px = __pyx_t_1; + + /* "SAR_GEO.pyx":31 + * cdef int rayCasting(Point p,np.ndarray[double,ndim=2] poly): + * cdef double px = p.x, + * cdef double py = p.y, # <<<<<<<<<<<<<< + * cdef int flag = 0 + * + */ + __pyx_t_1 = __pyx_v_p.y; + __pyx_v_py = __pyx_t_1; + + /* "SAR_GEO.pyx":32 + * cdef double px = p.x, + * cdef double py = p.y, + * cdef int flag = 0 # <<<<<<<<<<<<<< + * + * cdef int i=0 + */ + __pyx_v_flag = 0; + + /* "SAR_GEO.pyx":34 + * cdef int flag = 0 + * + * cdef int i=0 # <<<<<<<<<<<<<< + * cdef int l=poly.shape[0] + * cdef int j=l-1 + */ + __pyx_v_i = 0; + + /* "SAR_GEO.pyx":35 + * + * cdef int i=0 + * cdef int l=poly.shape[0] # <<<<<<<<<<<<<< + * cdef int j=l-1 + * + */ + __pyx_v_l = (__pyx_v_poly->dimensions[0]); + + /* "SAR_GEO.pyx":36 + * cdef int i=0 + * cdef int l=poly.shape[0] + * cdef int j=l-1 # <<<<<<<<<<<<<< + * + * cdef double sx + */ + __pyx_v_j = (__pyx_v_l - 1); + + /* "SAR_GEO.pyx":42 + * cdef double tx + * cdef double ty + * cdef x=0 # <<<<<<<<<<<<<< + * while(i= __pyx_pybuffernd_poly.diminfo[0].shape)) __pyx_t_5 = 0; + if (__pyx_t_4 < 0) { + __pyx_t_4 += __pyx_pybuffernd_poly.diminfo[1].shape; + if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 1; + } else if (unlikely(__pyx_t_4 >= __pyx_pybuffernd_poly.diminfo[1].shape)) __pyx_t_5 = 1; + if (unlikely(__pyx_t_5 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_5); + __PYX_ERR(0, 44, __pyx_L1_error) + } + __pyx_v_sx = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_poly.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_poly.diminfo[0].strides, __pyx_t_4, __pyx_pybuffernd_poly.diminfo[1].strides)); + + /* "SAR_GEO.pyx":45 + * while(i= __pyx_pybuffernd_poly.diminfo[0].shape)) __pyx_t_5 = 0; + if (__pyx_t_3 < 0) { + __pyx_t_3 += __pyx_pybuffernd_poly.diminfo[1].shape; + if (unlikely(__pyx_t_3 < 0)) __pyx_t_5 = 1; + } else if (unlikely(__pyx_t_3 >= __pyx_pybuffernd_poly.diminfo[1].shape)) __pyx_t_5 = 1; + if (unlikely(__pyx_t_5 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_5); + __PYX_ERR(0, 45, __pyx_L1_error) + } + __pyx_v_sy = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_poly.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_poly.diminfo[0].strides, __pyx_t_3, __pyx_pybuffernd_poly.diminfo[1].strides)); + + /* "SAR_GEO.pyx":46 + * sx=poly[i,0] + * sy=poly[i,1] + * tx=poly[j,0] # <<<<<<<<<<<<<< + * ty=poly[j,1] + * # + */ + __pyx_t_3 = __pyx_v_j; + __pyx_t_4 = 0; + __pyx_t_5 = -1; + if (__pyx_t_3 < 0) { + __pyx_t_3 += __pyx_pybuffernd_poly.diminfo[0].shape; + if (unlikely(__pyx_t_3 < 0)) __pyx_t_5 = 0; + } else if (unlikely(__pyx_t_3 >= __pyx_pybuffernd_poly.diminfo[0].shape)) __pyx_t_5 = 0; + if (__pyx_t_4 < 0) { + __pyx_t_4 += __pyx_pybuffernd_poly.diminfo[1].shape; + if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 1; + } else if (unlikely(__pyx_t_4 >= __pyx_pybuffernd_poly.diminfo[1].shape)) __pyx_t_5 = 1; + if (unlikely(__pyx_t_5 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_5); + __PYX_ERR(0, 46, __pyx_L1_error) + } + __pyx_v_tx = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_poly.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_poly.diminfo[0].strides, __pyx_t_4, __pyx_pybuffernd_poly.diminfo[1].strides)); + + /* "SAR_GEO.pyx":47 + * sy=poly[i,1] + * tx=poly[j,0] + * ty=poly[j,1] # <<<<<<<<<<<<<< + * # + * if((sx == px and sy == py) or (tx == px and ty == py)): + */ + __pyx_t_4 = __pyx_v_j; + __pyx_t_3 = 1; + __pyx_t_5 = -1; + if (__pyx_t_4 < 0) { + __pyx_t_4 += __pyx_pybuffernd_poly.diminfo[0].shape; + if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 0; + } else if (unlikely(__pyx_t_4 >= __pyx_pybuffernd_poly.diminfo[0].shape)) __pyx_t_5 = 0; + if (__pyx_t_3 < 0) { + __pyx_t_3 += __pyx_pybuffernd_poly.diminfo[1].shape; + if (unlikely(__pyx_t_3 < 0)) __pyx_t_5 = 1; + } else if (unlikely(__pyx_t_3 >= __pyx_pybuffernd_poly.diminfo[1].shape)) __pyx_t_5 = 1; + if (unlikely(__pyx_t_5 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_5); + __PYX_ERR(0, 47, __pyx_L1_error) + } + __pyx_v_ty = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_poly.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_poly.diminfo[0].strides, __pyx_t_3, __pyx_pybuffernd_poly.diminfo[1].strides)); + + /* "SAR_GEO.pyx":49 + * ty=poly[j,1] + * # + * if((sx == px and sy == py) or (tx == px and ty == py)): # <<<<<<<<<<<<<< + * return 1 + * #// + */ + __pyx_t_6 = ((__pyx_v_sx == __pyx_v_px) != 0); + if (!__pyx_t_6) { + goto __pyx_L7_next_or; + } else { + } + __pyx_t_6 = ((__pyx_v_sy == __pyx_v_py) != 0); + if (!__pyx_t_6) { + } else { + __pyx_t_2 = __pyx_t_6; + goto __pyx_L6_bool_binop_done; + } + __pyx_L7_next_or:; + __pyx_t_6 = ((__pyx_v_tx == __pyx_v_px) != 0); + if (__pyx_t_6) { + } else { + __pyx_t_2 = __pyx_t_6; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_6 = ((__pyx_v_ty == __pyx_v_py) != 0); + __pyx_t_2 = __pyx_t_6; + __pyx_L6_bool_binop_done:; + if (__pyx_t_2) { + + /* "SAR_GEO.pyx":50 + * # + * if((sx == px and sy == py) or (tx == px and ty == py)): + * return 1 # <<<<<<<<<<<<<< + * #// + * if((sy < py and ty >= py) or (sy >= py and ty < py)) : + */ + __pyx_r = 1; + goto __pyx_L0; + + /* "SAR_GEO.pyx":49 + * ty=poly[j,1] + * # + * if((sx == px and sy == py) or (tx == px and ty == py)): # <<<<<<<<<<<<<< + * return 1 + * #// + */ + } + + /* "SAR_GEO.pyx":52 + * return 1 + * #// + * if((sy < py and ty >= py) or (sy >= py and ty < py)) : # <<<<<<<<<<<<<< + * #// Y X + * x = sx + (py - sy) * (tx - sx) / (ty - sy) + */ + __pyx_t_6 = ((__pyx_v_sy < __pyx_v_py) != 0); + if (!__pyx_t_6) { + goto __pyx_L12_next_or; + } else { + } + __pyx_t_6 = ((__pyx_v_ty >= __pyx_v_py) != 0); + if (!__pyx_t_6) { + } else { + __pyx_t_2 = __pyx_t_6; + goto __pyx_L11_bool_binop_done; + } + __pyx_L12_next_or:; + __pyx_t_6 = ((__pyx_v_sy >= __pyx_v_py) != 0); + if (__pyx_t_6) { + } else { + __pyx_t_2 = __pyx_t_6; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_6 = ((__pyx_v_ty < __pyx_v_py) != 0); + __pyx_t_2 = __pyx_t_6; + __pyx_L11_bool_binop_done:; + if (__pyx_t_2) { + + /* "SAR_GEO.pyx":54 + * if((sy < py and ty >= py) or (sy >= py and ty < py)) : + * #// Y X + * x = sx + (py - sy) * (tx - sx) / (ty - sy) # <<<<<<<<<<<<<< + * #// + * if(x == px): + */ + __pyx_t_1 = ((__pyx_v_py - __pyx_v_sy) * (__pyx_v_tx - __pyx_v_sx)); + __pyx_t_7 = (__pyx_v_ty - __pyx_v_sy); + if (unlikely(__pyx_t_7 == 0)) { + PyErr_SetString(PyExc_ZeroDivisionError, "float division"); + __PYX_ERR(0, 54, __pyx_L1_error) + } + __pyx_t_8 = PyFloat_FromDouble((__pyx_v_sx + (__pyx_t_1 / __pyx_t_7))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 54, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_8); + __pyx_t_8 = 0; + + /* "SAR_GEO.pyx":56 + * x = sx + (py - sy) * (tx - sx) / (ty - sy) + * #// + * if(x == px): # <<<<<<<<<<<<<< + * return 1 + * + */ + __pyx_t_8 = PyFloat_FromDouble(__pyx_v_px); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = PyObject_RichCompare(__pyx_v_x, __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 56, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (__pyx_t_2) { + + /* "SAR_GEO.pyx":57 + * #// + * if(x == px): + * return 1 # <<<<<<<<<<<<<< + * + * #// + */ + __pyx_r = 1; + goto __pyx_L0; + + /* "SAR_GEO.pyx":56 + * x = sx + (py - sy) * (tx - sx) / (ty - sy) + * #// + * if(x == px): # <<<<<<<<<<<<<< + * return 1 + * + */ + } + + /* "SAR_GEO.pyx":60 + * + * #// + * if(x > px): # <<<<<<<<<<<<<< + * flag = 0 if flag==1 else 1 + * # + */ + __pyx_t_9 = PyFloat_FromDouble(__pyx_v_px); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_8 = PyObject_RichCompare(__pyx_v_x, __pyx_t_9, Py_GT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 60, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_2) { + + /* "SAR_GEO.pyx":61 + * #// + * if(x > px): + * flag = 0 if flag==1 else 1 # <<<<<<<<<<<<<< + * # + * j=i + */ + if (((__pyx_v_flag == 1) != 0)) { + __pyx_t_5 = 0; + } else { + __pyx_t_5 = 1; + } + __pyx_v_flag = __pyx_t_5; + + /* "SAR_GEO.pyx":60 + * + * #// + * if(x > px): # <<<<<<<<<<<<<< + * flag = 0 if flag==1 else 1 + * # + */ + } + + /* "SAR_GEO.pyx":52 + * return 1 + * #// + * if((sy < py and ty >= py) or (sy >= py and ty < py)) : # <<<<<<<<<<<<<< + * #// Y X + * x = sx + (py - sy) * (tx - sx) / (ty - sy) + */ + } + + /* "SAR_GEO.pyx":63 + * flag = 0 if flag==1 else 1 + * # + * j=i # <<<<<<<<<<<<<< + * i=i+1 + * + */ + __pyx_v_j = __pyx_v_i; + + /* "SAR_GEO.pyx":64 + * # + * j=i + * i=i+1 # <<<<<<<<<<<<<< + * + * #// + */ + __pyx_v_i = (__pyx_v_i + 1); + } + + /* "SAR_GEO.pyx":67 + * + * #// + * return 1 if flag==1 else 0 # <<<<<<<<<<<<<< + * + * cpdef np.ndarray[double,ndim=2] insert_data(np.ndarray[double,ndim=2] ori2geo_img,np.ndarray[int , ndim=1] row_ids,np.ndarray[int,ndim=1] col_ids,np.ndarray[double,ndim=1] data): + */ + if (((__pyx_v_flag == 1) != 0)) { + __pyx_t_5 = 1; + } else { + __pyx_t_5 = 0; + } + __pyx_r = __pyx_t_5; + goto __pyx_L0; + + /* "SAR_GEO.pyx":29 + * # + * ###################### + * cdef int rayCasting(Point p,np.ndarray[double,ndim=2] poly): # <<<<<<<<<<<<<< + * cdef double px = p.x, + * cdef double py = p.y, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_poly.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_WriteUnraisable("SAR_GEO.rayCasting", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_poly.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF(__pyx_v_x); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "SAR_GEO.pyx":69 + * return 1 if flag==1 else 0 + * + * cpdef np.ndarray[double,ndim=2] insert_data(np.ndarray[double,ndim=2] ori2geo_img,np.ndarray[int , ndim=1] row_ids,np.ndarray[int,ndim=1] col_ids,np.ndarray[double,ndim=1] data): # <<<<<<<<<<<<<< + * cdef int i=0 + * cdef int count=row_ids.shape[0] + */ + +static PyObject *__pyx_pw_7SAR_GEO_1insert_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyArrayObject *__pyx_f_7SAR_GEO_insert_data(PyArrayObject *__pyx_v_ori2geo_img, PyArrayObject *__pyx_v_row_ids, PyArrayObject *__pyx_v_col_ids, PyArrayObject *__pyx_v_data, CYTHON_UNUSED int __pyx_skip_dispatch) { + int __pyx_v_i; + int __pyx_v_count; + __Pyx_LocalBuf_ND __pyx_pybuffernd_col_ids; + __Pyx_Buffer __pyx_pybuffer_col_ids; + __Pyx_LocalBuf_ND __pyx_pybuffernd_data; + __Pyx_Buffer __pyx_pybuffer_data; + __Pyx_LocalBuf_ND __pyx_pybuffernd_ori2geo_img; + __Pyx_Buffer __pyx_pybuffer_ori2geo_img; + __Pyx_LocalBuf_ND __pyx_pybuffernd_row_ids; + __Pyx_Buffer __pyx_pybuffer_row_ids; + PyArrayObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + Py_ssize_t __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; + Py_ssize_t __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("insert_data", 0); + __pyx_pybuffer_ori2geo_img.pybuffer.buf = NULL; + __pyx_pybuffer_ori2geo_img.refcount = 0; + __pyx_pybuffernd_ori2geo_img.data = NULL; + __pyx_pybuffernd_ori2geo_img.rcbuffer = &__pyx_pybuffer_ori2geo_img; + __pyx_pybuffer_row_ids.pybuffer.buf = NULL; + __pyx_pybuffer_row_ids.refcount = 0; + __pyx_pybuffernd_row_ids.data = NULL; + __pyx_pybuffernd_row_ids.rcbuffer = &__pyx_pybuffer_row_ids; + __pyx_pybuffer_col_ids.pybuffer.buf = NULL; + __pyx_pybuffer_col_ids.refcount = 0; + __pyx_pybuffernd_col_ids.data = NULL; + __pyx_pybuffernd_col_ids.rcbuffer = &__pyx_pybuffer_col_ids; + __pyx_pybuffer_data.pybuffer.buf = NULL; + __pyx_pybuffer_data.refcount = 0; + __pyx_pybuffernd_data.data = NULL; + __pyx_pybuffernd_data.rcbuffer = &__pyx_pybuffer_data; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer, (PyObject*)__pyx_v_ori2geo_img, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 69, __pyx_L1_error) + } + __pyx_pybuffernd_ori2geo_img.diminfo[0].strides = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ori2geo_img.diminfo[0].shape = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ori2geo_img.diminfo[1].strides = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ori2geo_img.diminfo[1].shape = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_row_ids.rcbuffer->pybuffer, (PyObject*)__pyx_v_row_ids, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 69, __pyx_L1_error) + } + __pyx_pybuffernd_row_ids.diminfo[0].strides = __pyx_pybuffernd_row_ids.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_row_ids.diminfo[0].shape = __pyx_pybuffernd_row_ids.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_col_ids.rcbuffer->pybuffer, (PyObject*)__pyx_v_col_ids, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 69, __pyx_L1_error) + } + __pyx_pybuffernd_col_ids.diminfo[0].strides = __pyx_pybuffernd_col_ids.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_col_ids.diminfo[0].shape = __pyx_pybuffernd_col_ids.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_data.rcbuffer->pybuffer, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 69, __pyx_L1_error) + } + __pyx_pybuffernd_data.diminfo[0].strides = __pyx_pybuffernd_data.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_data.diminfo[0].shape = __pyx_pybuffernd_data.rcbuffer->pybuffer.shape[0]; + + /* "SAR_GEO.pyx":70 + * + * cpdef np.ndarray[double,ndim=2] insert_data(np.ndarray[double,ndim=2] ori2geo_img,np.ndarray[int , ndim=1] row_ids,np.ndarray[int,ndim=1] col_ids,np.ndarray[double,ndim=1] data): + * cdef int i=0 # <<<<<<<<<<<<<< + * cdef int count=row_ids.shape[0] + * while idimensions[0]); + + /* "SAR_GEO.pyx":72 + * cdef int i=0 + * cdef int count=row_ids.shape[0] + * while i= __pyx_pybuffernd_data.diminfo[0].shape)) __pyx_t_3 = 0; + if (unlikely(__pyx_t_3 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_3); + __PYX_ERR(0, 73, __pyx_L1_error) + } + __pyx_t_4 = __pyx_v_i; + __pyx_t_3 = -1; + if (__pyx_t_4 < 0) { + __pyx_t_4 += __pyx_pybuffernd_row_ids.diminfo[0].shape; + if (unlikely(__pyx_t_4 < 0)) __pyx_t_3 = 0; + } else if (unlikely(__pyx_t_4 >= __pyx_pybuffernd_row_ids.diminfo[0].shape)) __pyx_t_3 = 0; + if (unlikely(__pyx_t_3 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_3); + __PYX_ERR(0, 73, __pyx_L1_error) + } + __pyx_t_5 = __pyx_v_i; + __pyx_t_3 = -1; + if (__pyx_t_5 < 0) { + __pyx_t_5 += __pyx_pybuffernd_col_ids.diminfo[0].shape; + if (unlikely(__pyx_t_5 < 0)) __pyx_t_3 = 0; + } else if (unlikely(__pyx_t_5 >= __pyx_pybuffernd_col_ids.diminfo[0].shape)) __pyx_t_3 = 0; + if (unlikely(__pyx_t_3 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_3); + __PYX_ERR(0, 73, __pyx_L1_error) + } + __pyx_t_6 = (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_row_ids.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_row_ids.diminfo[0].strides)); + __pyx_t_7 = (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_col_ids.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_col_ids.diminfo[0].strides)); + __pyx_t_3 = -1; + if (__pyx_t_6 < 0) { + __pyx_t_6 += __pyx_pybuffernd_ori2geo_img.diminfo[0].shape; + if (unlikely(__pyx_t_6 < 0)) __pyx_t_3 = 0; + } else if (unlikely(__pyx_t_6 >= __pyx_pybuffernd_ori2geo_img.diminfo[0].shape)) __pyx_t_3 = 0; + if (__pyx_t_7 < 0) { + __pyx_t_7 += __pyx_pybuffernd_ori2geo_img.diminfo[1].shape; + if (unlikely(__pyx_t_7 < 0)) __pyx_t_3 = 1; + } else if (unlikely(__pyx_t_7 >= __pyx_pybuffernd_ori2geo_img.diminfo[1].shape)) __pyx_t_3 = 1; + if (unlikely(__pyx_t_3 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_3); + __PYX_ERR(0, 73, __pyx_L1_error) + } + *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_ori2geo_img.diminfo[0].strides, __pyx_t_7, __pyx_pybuffernd_ori2geo_img.diminfo[1].strides) = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_data.rcbuffer->pybuffer.buf, __pyx_t_2, __pyx_pybuffernd_data.diminfo[0].strides)); + + /* "SAR_GEO.pyx":74 + * while ipybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_row_ids.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("SAR_GEO.insert_data", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_col_ids.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_row_ids.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_7SAR_GEO_1insert_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7SAR_GEO_1insert_data(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_ori2geo_img = 0; + PyArrayObject *__pyx_v_row_ids = 0; + PyArrayObject *__pyx_v_col_ids = 0; + PyArrayObject *__pyx_v_data = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("insert_data (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ori2geo_img,&__pyx_n_s_row_ids,&__pyx_n_s_col_ids,&__pyx_n_s_data,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_ori2geo_img)) != 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_row_ids)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("insert_data", 1, 4, 4, 1); __PYX_ERR(0, 69, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_col_ids)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("insert_data", 1, 4, 4, 2); __PYX_ERR(0, 69, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("insert_data", 1, 4, 4, 3); __PYX_ERR(0, 69, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insert_data") < 0)) __PYX_ERR(0, 69, __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_ori2geo_img = ((PyArrayObject *)values[0]); + __pyx_v_row_ids = ((PyArrayObject *)values[1]); + __pyx_v_col_ids = ((PyArrayObject *)values[2]); + __pyx_v_data = ((PyArrayObject *)values[3]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("insert_data", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 69, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("SAR_GEO.insert_data", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ori2geo_img), __pyx_ptype_5numpy_ndarray, 1, "ori2geo_img", 0))) __PYX_ERR(0, 69, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_row_ids), __pyx_ptype_5numpy_ndarray, 1, "row_ids", 0))) __PYX_ERR(0, 69, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_col_ids), __pyx_ptype_5numpy_ndarray, 1, "col_ids", 0))) __PYX_ERR(0, 69, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), __pyx_ptype_5numpy_ndarray, 1, "data", 0))) __PYX_ERR(0, 69, __pyx_L1_error) + __pyx_r = __pyx_pf_7SAR_GEO_insert_data(__pyx_self, __pyx_v_ori2geo_img, __pyx_v_row_ids, __pyx_v_col_ids, __pyx_v_data); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7SAR_GEO_insert_data(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ori2geo_img, PyArrayObject *__pyx_v_row_ids, PyArrayObject *__pyx_v_col_ids, PyArrayObject *__pyx_v_data) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_col_ids; + __Pyx_Buffer __pyx_pybuffer_col_ids; + __Pyx_LocalBuf_ND __pyx_pybuffernd_data; + __Pyx_Buffer __pyx_pybuffer_data; + __Pyx_LocalBuf_ND __pyx_pybuffernd_ori2geo_img; + __Pyx_Buffer __pyx_pybuffer_ori2geo_img; + __Pyx_LocalBuf_ND __pyx_pybuffernd_row_ids; + __Pyx_Buffer __pyx_pybuffer_row_ids; + 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("insert_data", 0); + __pyx_pybuffer_ori2geo_img.pybuffer.buf = NULL; + __pyx_pybuffer_ori2geo_img.refcount = 0; + __pyx_pybuffernd_ori2geo_img.data = NULL; + __pyx_pybuffernd_ori2geo_img.rcbuffer = &__pyx_pybuffer_ori2geo_img; + __pyx_pybuffer_row_ids.pybuffer.buf = NULL; + __pyx_pybuffer_row_ids.refcount = 0; + __pyx_pybuffernd_row_ids.data = NULL; + __pyx_pybuffernd_row_ids.rcbuffer = &__pyx_pybuffer_row_ids; + __pyx_pybuffer_col_ids.pybuffer.buf = NULL; + __pyx_pybuffer_col_ids.refcount = 0; + __pyx_pybuffernd_col_ids.data = NULL; + __pyx_pybuffernd_col_ids.rcbuffer = &__pyx_pybuffer_col_ids; + __pyx_pybuffer_data.pybuffer.buf = NULL; + __pyx_pybuffer_data.refcount = 0; + __pyx_pybuffernd_data.data = NULL; + __pyx_pybuffernd_data.rcbuffer = &__pyx_pybuffer_data; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer, (PyObject*)__pyx_v_ori2geo_img, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 69, __pyx_L1_error) + } + __pyx_pybuffernd_ori2geo_img.diminfo[0].strides = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ori2geo_img.diminfo[0].shape = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ori2geo_img.diminfo[1].strides = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ori2geo_img.diminfo[1].shape = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_row_ids.rcbuffer->pybuffer, (PyObject*)__pyx_v_row_ids, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 69, __pyx_L1_error) + } + __pyx_pybuffernd_row_ids.diminfo[0].strides = __pyx_pybuffernd_row_ids.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_row_ids.diminfo[0].shape = __pyx_pybuffernd_row_ids.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_col_ids.rcbuffer->pybuffer, (PyObject*)__pyx_v_col_ids, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 69, __pyx_L1_error) + } + __pyx_pybuffernd_col_ids.diminfo[0].strides = __pyx_pybuffernd_col_ids.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_col_ids.diminfo[0].shape = __pyx_pybuffernd_col_ids.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_data.rcbuffer->pybuffer, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 69, __pyx_L1_error) + } + __pyx_pybuffernd_data.diminfo[0].strides = __pyx_pybuffernd_data.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_data.diminfo[0].shape = __pyx_pybuffernd_data.rcbuffer->pybuffer.shape[0]; + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((PyObject *)__pyx_f_7SAR_GEO_insert_data(__pyx_v_ori2geo_img, __pyx_v_row_ids, __pyx_v_col_ids, __pyx_v_data, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_col_ids.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_row_ids.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("SAR_GEO.insert_data", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_col_ids.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_row_ids.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "SAR_GEO.pyx":77 + * return ori2geo_img + * + * cpdef np.ndarray[double,ndim=2] cut_L1A_img(np.ndarray[double,ndim=3] ori2geo_img,np.ndarray[double,ndim=2] roi_list): # <<<<<<<<<<<<<< + * """ roi + * """ + */ + +static PyObject *__pyx_pw_7SAR_GEO_3cut_L1A_img(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyArrayObject *__pyx_f_7SAR_GEO_cut_L1A_img(PyArrayObject *__pyx_v_ori2geo_img, PyArrayObject *__pyx_v_roi_list, CYTHON_UNUSED int __pyx_skip_dispatch) { + int __pyx_v_height; + int __pyx_v_width; + int __pyx_v_i; + int __pyx_v_j; + struct __pyx_t_7SAR_GEO_Point __pyx_v_temp_p; + PyArrayObject *__pyx_v_mask = 0; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mask; + __Pyx_Buffer __pyx_pybuffer_mask; + __Pyx_LocalBuf_ND __pyx_pybuffernd_ori2geo_img; + __Pyx_Buffer __pyx_pybuffer_ori2geo_img; + __Pyx_LocalBuf_ND __pyx_pybuffernd_roi_list; + __Pyx_Buffer __pyx_pybuffer_roi_list; + PyArrayObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_6 = NULL; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + Py_ssize_t __pyx_t_9; + Py_ssize_t __pyx_t_10; + int __pyx_t_11; + double __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("cut_L1A_img", 0); + __pyx_pybuffer_mask.pybuffer.buf = NULL; + __pyx_pybuffer_mask.refcount = 0; + __pyx_pybuffernd_mask.data = NULL; + __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask; + __pyx_pybuffer_ori2geo_img.pybuffer.buf = NULL; + __pyx_pybuffer_ori2geo_img.refcount = 0; + __pyx_pybuffernd_ori2geo_img.data = NULL; + __pyx_pybuffernd_ori2geo_img.rcbuffer = &__pyx_pybuffer_ori2geo_img; + __pyx_pybuffer_roi_list.pybuffer.buf = NULL; + __pyx_pybuffer_roi_list.refcount = 0; + __pyx_pybuffernd_roi_list.data = NULL; + __pyx_pybuffernd_roi_list.rcbuffer = &__pyx_pybuffer_roi_list; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer, (PyObject*)__pyx_v_ori2geo_img, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 77, __pyx_L1_error) + } + __pyx_pybuffernd_ori2geo_img.diminfo[0].strides = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ori2geo_img.diminfo[0].shape = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ori2geo_img.diminfo[1].strides = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ori2geo_img.diminfo[1].shape = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_ori2geo_img.diminfo[2].strides = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_ori2geo_img.diminfo[2].shape = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_roi_list.rcbuffer->pybuffer, (PyObject*)__pyx_v_roi_list, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 77, __pyx_L1_error) + } + __pyx_pybuffernd_roi_list.diminfo[0].strides = __pyx_pybuffernd_roi_list.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_roi_list.diminfo[0].shape = __pyx_pybuffernd_roi_list.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_roi_list.diminfo[1].strides = __pyx_pybuffernd_roi_list.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_roi_list.diminfo[1].shape = __pyx_pybuffernd_roi_list.rcbuffer->pybuffer.shape[1]; + + /* "SAR_GEO.pyx":80 + * """ roi + * """ + * cdef int height=ori2geo_img.shape[1] # <<<<<<<<<<<<<< + * cdef int width=ori2geo_img.shape[2] + * cdef int i=0 + */ + __pyx_v_height = (__pyx_v_ori2geo_img->dimensions[1]); + + /* "SAR_GEO.pyx":81 + * """ + * cdef int height=ori2geo_img.shape[1] + * cdef int width=ori2geo_img.shape[2] # <<<<<<<<<<<<<< + * cdef int i=0 + * cdef int j=0 + */ + __pyx_v_width = (__pyx_v_ori2geo_img->dimensions[2]); + + /* "SAR_GEO.pyx":82 + * cdef int height=ori2geo_img.shape[1] + * cdef int width=ori2geo_img.shape[2] + * cdef int i=0 # <<<<<<<<<<<<<< + * cdef int j=0 + * cdef Point temp_p + */ + __pyx_v_i = 0; + + /* "SAR_GEO.pyx":83 + * cdef int width=ori2geo_img.shape[2] + * cdef int i=0 + * cdef int j=0 # <<<<<<<<<<<<<< + * cdef Point temp_p + * cdef np.ndarray[double,ndim=2] mask=np.zeros((height,width),dtype=np.float64) + */ + __pyx_v_j = 0; + + /* "SAR_GEO.pyx":85 + * cdef int j=0 + * cdef Point temp_p + * cdef np.ndarray[double,ndim=2] mask=np.zeros((height,width),dtype=np.float64) # <<<<<<<<<<<<<< + * while ipybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + __pyx_v_mask = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 85, __pyx_L1_error) + } else {__pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_6 = 0; + __pyx_v_mask = ((PyArrayObject *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "SAR_GEO.pyx":86 + * cdef Point temp_p + * cdef np.ndarray[double,ndim=2] mask=np.zeros((height,width),dtype=np.float64) + * while i= __pyx_pybuffernd_ori2geo_img.diminfo[0].shape)) __pyx_t_11 = 0; + if (__pyx_t_9 < 0) { + __pyx_t_9 += __pyx_pybuffernd_ori2geo_img.diminfo[1].shape; + if (unlikely(__pyx_t_9 < 0)) __pyx_t_11 = 1; + } else if (unlikely(__pyx_t_9 >= __pyx_pybuffernd_ori2geo_img.diminfo[1].shape)) __pyx_t_11 = 1; + if (__pyx_t_10 < 0) { + __pyx_t_10 += __pyx_pybuffernd_ori2geo_img.diminfo[2].shape; + if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 2; + } else if (unlikely(__pyx_t_10 >= __pyx_pybuffernd_ori2geo_img.diminfo[2].shape)) __pyx_t_11 = 2; + if (unlikely(__pyx_t_11 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_11); + __PYX_ERR(0, 89, __pyx_L1_error) + } + __pyx_v_temp_p.x = (*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_ori2geo_img.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_ori2geo_img.diminfo[1].strides, __pyx_t_10, __pyx_pybuffernd_ori2geo_img.diminfo[2].strides)); + + /* "SAR_GEO.pyx":90 + * while j= __pyx_pybuffernd_ori2geo_img.diminfo[0].shape)) __pyx_t_11 = 0; + if (__pyx_t_9 < 0) { + __pyx_t_9 += __pyx_pybuffernd_ori2geo_img.diminfo[1].shape; + if (unlikely(__pyx_t_9 < 0)) __pyx_t_11 = 1; + } else if (unlikely(__pyx_t_9 >= __pyx_pybuffernd_ori2geo_img.diminfo[1].shape)) __pyx_t_11 = 1; + if (__pyx_t_8 < 0) { + __pyx_t_8 += __pyx_pybuffernd_ori2geo_img.diminfo[2].shape; + if (unlikely(__pyx_t_8 < 0)) __pyx_t_11 = 2; + } else if (unlikely(__pyx_t_8 >= __pyx_pybuffernd_ori2geo_img.diminfo[2].shape)) __pyx_t_11 = 2; + if (unlikely(__pyx_t_11 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_11); + __PYX_ERR(0, 90, __pyx_L1_error) + } + __pyx_v_temp_p.y = (*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_ori2geo_img.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_ori2geo_img.diminfo[1].strides, __pyx_t_8, __pyx_pybuffernd_ori2geo_img.diminfo[2].strides)); + + /* "SAR_GEO.pyx":91 + * temp_p.x=ori2geo_img[0,i,j] # temp_p + * temp_p.y=ori2geo_img[1,i,j] # temp_p + * if rayCasting(temp_p,roi_list)==1: # <<<<<<<<<<<<<< + * mask[i,j]=1 + * else: + */ + __pyx_t_7 = ((__pyx_f_7SAR_GEO_rayCasting(__pyx_v_temp_p, ((PyArrayObject *)__pyx_v_roi_list)) == 1) != 0); + if (__pyx_t_7) { + + /* "SAR_GEO.pyx":92 + * temp_p.y=ori2geo_img[1,i,j] # temp_p + * if rayCasting(temp_p,roi_list)==1: + * mask[i,j]=1 # <<<<<<<<<<<<<< + * else: + * mask[i,j]=np.nan + */ + __pyx_t_8 = __pyx_v_i; + __pyx_t_9 = __pyx_v_j; + __pyx_t_11 = -1; + if (__pyx_t_8 < 0) { + __pyx_t_8 += __pyx_pybuffernd_mask.diminfo[0].shape; + if (unlikely(__pyx_t_8 < 0)) __pyx_t_11 = 0; + } else if (unlikely(__pyx_t_8 >= __pyx_pybuffernd_mask.diminfo[0].shape)) __pyx_t_11 = 0; + if (__pyx_t_9 < 0) { + __pyx_t_9 += __pyx_pybuffernd_mask.diminfo[1].shape; + if (unlikely(__pyx_t_9 < 0)) __pyx_t_11 = 1; + } else if (unlikely(__pyx_t_9 >= __pyx_pybuffernd_mask.diminfo[1].shape)) __pyx_t_11 = 1; + if (unlikely(__pyx_t_11 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_11); + __PYX_ERR(0, 92, __pyx_L1_error) + } + *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_mask.diminfo[1].strides) = 1.0; + + /* "SAR_GEO.pyx":91 + * temp_p.x=ori2geo_img[0,i,j] # temp_p + * temp_p.y=ori2geo_img[1,i,j] # temp_p + * if rayCasting(temp_p,roi_list)==1: # <<<<<<<<<<<<<< + * mask[i,j]=1 + * else: + */ + goto __pyx_L7; + } + + /* "SAR_GEO.pyx":94 + * mask[i,j]=1 + * else: + * mask[i,j]=np.nan # <<<<<<<<<<<<<< + * j=j+1 + * i=i+1 + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_nan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_9 = __pyx_v_i; + __pyx_t_8 = __pyx_v_j; + __pyx_t_11 = -1; + if (__pyx_t_9 < 0) { + __pyx_t_9 += __pyx_pybuffernd_mask.diminfo[0].shape; + if (unlikely(__pyx_t_9 < 0)) __pyx_t_11 = 0; + } else if (unlikely(__pyx_t_9 >= __pyx_pybuffernd_mask.diminfo[0].shape)) __pyx_t_11 = 0; + if (__pyx_t_8 < 0) { + __pyx_t_8 += __pyx_pybuffernd_mask.diminfo[1].shape; + if (unlikely(__pyx_t_8 < 0)) __pyx_t_11 = 1; + } else if (unlikely(__pyx_t_8 >= __pyx_pybuffernd_mask.diminfo[1].shape)) __pyx_t_11 = 1; + if (unlikely(__pyx_t_11 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_11); + __PYX_ERR(0, 94, __pyx_L1_error) + } + *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_mask.diminfo[1].strides) = __pyx_t_12; + } + __pyx_L7:; + + /* "SAR_GEO.pyx":95 + * else: + * mask[i,j]=np.nan + * j=j+1 # <<<<<<<<<<<<<< + * i=i+1 + * return mask + */ + __pyx_v_j = (__pyx_v_j + 1); + } + + /* "SAR_GEO.pyx":96 + * mask[i,j]=np.nan + * j=j+1 + * i=i+1 # <<<<<<<<<<<<<< + * return mask + * + */ + __pyx_v_i = (__pyx_v_i + 1); + } + + /* "SAR_GEO.pyx":97 + * j=j+1 + * i=i+1 + * return mask # <<<<<<<<<<<<<< + * + * cpdef np.ndarray[double,ndim=2] gereratorMask(np.ndarray[double,ndim=1] rlist,np.ndarray[double,ndim=1] clist,np.ndarray[double,ndim=2] mask): + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + __Pyx_INCREF(((PyObject *)__pyx_v_mask)); + __pyx_r = ((PyArrayObject *)__pyx_v_mask); + goto __pyx_L0; + + /* "SAR_GEO.pyx":77 + * return ori2geo_img + * + * cpdef np.ndarray[double,ndim=2] cut_L1A_img(np.ndarray[double,ndim=3] ori2geo_img,np.ndarray[double,ndim=2] roi_list): # <<<<<<<<<<<<<< + * """ roi + * """ + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_roi_list.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("SAR_GEO.cut_L1A_img", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_roi_list.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_mask); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_7SAR_GEO_3cut_L1A_img(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_7SAR_GEO_2cut_L1A_img[] = " \346\240\271\346\215\256roi \350\216\267\345\217\226\346\240\205\346\240\274\345\257\271\350\261\241\n "; +static PyObject *__pyx_pw_7SAR_GEO_3cut_L1A_img(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_ori2geo_img = 0; + PyArrayObject *__pyx_v_roi_list = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("cut_L1A_img (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ori2geo_img,&__pyx_n_s_roi_list,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_ori2geo_img)) != 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_roi_list)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("cut_L1A_img", 1, 2, 2, 1); __PYX_ERR(0, 77, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cut_L1A_img") < 0)) __PYX_ERR(0, 77, __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_ori2geo_img = ((PyArrayObject *)values[0]); + __pyx_v_roi_list = ((PyArrayObject *)values[1]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("cut_L1A_img", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 77, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("SAR_GEO.cut_L1A_img", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ori2geo_img), __pyx_ptype_5numpy_ndarray, 1, "ori2geo_img", 0))) __PYX_ERR(0, 77, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_roi_list), __pyx_ptype_5numpy_ndarray, 1, "roi_list", 0))) __PYX_ERR(0, 77, __pyx_L1_error) + __pyx_r = __pyx_pf_7SAR_GEO_2cut_L1A_img(__pyx_self, __pyx_v_ori2geo_img, __pyx_v_roi_list); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7SAR_GEO_2cut_L1A_img(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ori2geo_img, PyArrayObject *__pyx_v_roi_list) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_ori2geo_img; + __Pyx_Buffer __pyx_pybuffer_ori2geo_img; + __Pyx_LocalBuf_ND __pyx_pybuffernd_roi_list; + __Pyx_Buffer __pyx_pybuffer_roi_list; + 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("cut_L1A_img", 0); + __pyx_pybuffer_ori2geo_img.pybuffer.buf = NULL; + __pyx_pybuffer_ori2geo_img.refcount = 0; + __pyx_pybuffernd_ori2geo_img.data = NULL; + __pyx_pybuffernd_ori2geo_img.rcbuffer = &__pyx_pybuffer_ori2geo_img; + __pyx_pybuffer_roi_list.pybuffer.buf = NULL; + __pyx_pybuffer_roi_list.refcount = 0; + __pyx_pybuffernd_roi_list.data = NULL; + __pyx_pybuffernd_roi_list.rcbuffer = &__pyx_pybuffer_roi_list; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer, (PyObject*)__pyx_v_ori2geo_img, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 77, __pyx_L1_error) + } + __pyx_pybuffernd_ori2geo_img.diminfo[0].strides = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ori2geo_img.diminfo[0].shape = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ori2geo_img.diminfo[1].strides = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ori2geo_img.diminfo[1].shape = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_ori2geo_img.diminfo[2].strides = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_ori2geo_img.diminfo[2].shape = __pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_roi_list.rcbuffer->pybuffer, (PyObject*)__pyx_v_roi_list, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 77, __pyx_L1_error) + } + __pyx_pybuffernd_roi_list.diminfo[0].strides = __pyx_pybuffernd_roi_list.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_roi_list.diminfo[0].shape = __pyx_pybuffernd_roi_list.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_roi_list.diminfo[1].strides = __pyx_pybuffernd_roi_list.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_roi_list.diminfo[1].shape = __pyx_pybuffernd_roi_list.rcbuffer->pybuffer.shape[1]; + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((PyObject *)__pyx_f_7SAR_GEO_cut_L1A_img(__pyx_v_ori2geo_img, __pyx_v_roi_list, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_roi_list.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("SAR_GEO.cut_L1A_img", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo_img.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_roi_list.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "SAR_GEO.pyx":99 + * return mask + * + * cpdef np.ndarray[double,ndim=2] gereratorMask(np.ndarray[double,ndim=1] rlist,np.ndarray[double,ndim=1] clist,np.ndarray[double,ndim=2] mask): # <<<<<<<<<<<<<< + * cdef int rcount=rlist.shape[0] + * cdef int ccount=clist.shape[0] + */ + +static PyObject *__pyx_pw_7SAR_GEO_5gereratorMask(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyArrayObject *__pyx_f_7SAR_GEO_gereratorMask(PyArrayObject *__pyx_v_rlist, PyArrayObject *__pyx_v_clist, PyArrayObject *__pyx_v_mask, CYTHON_UNUSED int __pyx_skip_dispatch) { + int __pyx_v_rcount; + int __pyx_v_ccount; + int __pyx_v_count; + int __pyx_v_i; + CYTHON_UNUSED int __pyx_v_j; + int __pyx_v_temp_row; + int __pyx_v_temp_col; + int __pyx_v_height; + int __pyx_v_width; + __Pyx_LocalBuf_ND __pyx_pybuffernd_clist; + __Pyx_Buffer __pyx_pybuffer_clist; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mask; + __Pyx_Buffer __pyx_pybuffer_mask; + __Pyx_LocalBuf_ND __pyx_pybuffernd_rlist; + __Pyx_Buffer __pyx_pybuffer_rlist; + PyArrayObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("gereratorMask", 0); + __pyx_pybuffer_rlist.pybuffer.buf = NULL; + __pyx_pybuffer_rlist.refcount = 0; + __pyx_pybuffernd_rlist.data = NULL; + __pyx_pybuffernd_rlist.rcbuffer = &__pyx_pybuffer_rlist; + __pyx_pybuffer_clist.pybuffer.buf = NULL; + __pyx_pybuffer_clist.refcount = 0; + __pyx_pybuffernd_clist.data = NULL; + __pyx_pybuffernd_clist.rcbuffer = &__pyx_pybuffer_clist; + __pyx_pybuffer_mask.pybuffer.buf = NULL; + __pyx_pybuffer_mask.refcount = 0; + __pyx_pybuffernd_mask.data = NULL; + __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_rlist.rcbuffer->pybuffer, (PyObject*)__pyx_v_rlist, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 99, __pyx_L1_error) + } + __pyx_pybuffernd_rlist.diminfo[0].strides = __pyx_pybuffernd_rlist.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_rlist.diminfo[0].shape = __pyx_pybuffernd_rlist.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clist.rcbuffer->pybuffer, (PyObject*)__pyx_v_clist, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 99, __pyx_L1_error) + } + __pyx_pybuffernd_clist.diminfo[0].strides = __pyx_pybuffernd_clist.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_clist.diminfo[0].shape = __pyx_pybuffernd_clist.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 99, __pyx_L1_error) + } + __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; + + /* "SAR_GEO.pyx":100 + * + * cpdef np.ndarray[double,ndim=2] gereratorMask(np.ndarray[double,ndim=1] rlist,np.ndarray[double,ndim=1] clist,np.ndarray[double,ndim=2] mask): + * cdef int rcount=rlist.shape[0] # <<<<<<<<<<<<<< + * cdef int ccount=clist.shape[0] + * cdef int count=rcount if rcountdimensions[0]); + + /* "SAR_GEO.pyx":101 + * cpdef np.ndarray[double,ndim=2] gereratorMask(np.ndarray[double,ndim=1] rlist,np.ndarray[double,ndim=1] clist,np.ndarray[double,ndim=2] mask): + * cdef int rcount=rlist.shape[0] + * cdef int ccount=clist.shape[0] # <<<<<<<<<<<<<< + * cdef int count=rcount if rcountdimensions[0]); + + /* "SAR_GEO.pyx":102 + * cdef int rcount=rlist.shape[0] + * cdef int ccount=clist.shape[0] + * cdef int count=rcount if rcountdimensions[0]); + + /* "SAR_GEO.pyx":108 + * cdef int temp_col=0 + * cdef int height=mask.shape[0] + * cdef int width=mask.shape[1] # <<<<<<<<<<<<<< + * while idimensions[1]); + + /* "SAR_GEO.pyx":109 + * cdef int height=mask.shape[0] + * cdef int width=mask.shape[1] + * while i= __pyx_pybuffernd_rlist.diminfo[0].shape)) __pyx_t_1 = 0; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 112, __pyx_L1_error) + } + __pyx_v_temp_row = ((int)ceil((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_rlist.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_rlist.diminfo[0].strides)))); + + /* "SAR_GEO.pyx":113 + * # 1 + * temp_row=int(ceil(rlist[i])) + * temp_col=int(ceil(clist[i])) # <<<<<<<<<<<<<< + * + * if temp_row>=0 and temp_col>=0 and temp_row= __pyx_pybuffernd_clist.diminfo[0].shape)) __pyx_t_1 = 0; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 113, __pyx_L1_error) + } + __pyx_v_temp_col = ((int)ceil((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_clist.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_clist.diminfo[0].strides)))); + + /* "SAR_GEO.pyx":115 + * temp_col=int(ceil(clist[i])) + * + * if temp_row>=0 and temp_col>=0 and temp_row= 0) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_col >= 0) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_row < __pyx_v_height) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_col < __pyx_v_width) != 0); + __pyx_t_2 = __pyx_t_4; + __pyx_L6_bool_binop_done:; + if (__pyx_t_2) { + + /* "SAR_GEO.pyx":116 + * + * if temp_row>=0 and temp_col>=0 and temp_row= __pyx_pybuffernd_mask.diminfo[0].shape)) __pyx_t_1 = 0; + if (__pyx_t_5 < 0) { + __pyx_t_5 += __pyx_pybuffernd_mask.diminfo[1].shape; + if (unlikely(__pyx_t_5 < 0)) __pyx_t_1 = 1; + } else if (unlikely(__pyx_t_5 >= __pyx_pybuffernd_mask.diminfo[1].shape)) __pyx_t_1 = 1; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 116, __pyx_L1_error) + } + *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_mask.diminfo[1].strides) = 1.0; + + /* "SAR_GEO.pyx":115 + * temp_col=int(ceil(clist[i])) + * + * if temp_row>=0 and temp_col>=0 and temp_row=0 and temp_col>=0 and temp_row= __pyx_pybuffernd_rlist.diminfo[0].shape)) __pyx_t_1 = 0; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 119, __pyx_L1_error) + } + __pyx_v_temp_row = ((int)floor((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_rlist.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_rlist.diminfo[0].strides)))); + + /* "SAR_GEO.pyx":120 + * # 2 + * temp_row=int(floor(rlist[i])) + * temp_col=int(ceil(clist[i])) # <<<<<<<<<<<<<< + * if temp_row>=0 and temp_col>=0 and temp_row= __pyx_pybuffernd_clist.diminfo[0].shape)) __pyx_t_1 = 0; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 120, __pyx_L1_error) + } + __pyx_v_temp_col = ((int)ceil((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_clist.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_clist.diminfo[0].strides)))); + + /* "SAR_GEO.pyx":121 + * temp_row=int(floor(rlist[i])) + * temp_col=int(ceil(clist[i])) + * if temp_row>=0 and temp_col>=0 and temp_row= 0) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_col >= 0) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_row < __pyx_v_height) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_col < __pyx_v_width) != 0); + __pyx_t_2 = __pyx_t_4; + __pyx_L11_bool_binop_done:; + if (__pyx_t_2) { + + /* "SAR_GEO.pyx":122 + * temp_col=int(ceil(clist[i])) + * if temp_row>=0 and temp_col>=0 and temp_row= __pyx_pybuffernd_mask.diminfo[0].shape)) __pyx_t_1 = 0; + if (__pyx_t_3 < 0) { + __pyx_t_3 += __pyx_pybuffernd_mask.diminfo[1].shape; + if (unlikely(__pyx_t_3 < 0)) __pyx_t_1 = 1; + } else if (unlikely(__pyx_t_3 >= __pyx_pybuffernd_mask.diminfo[1].shape)) __pyx_t_1 = 1; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 122, __pyx_L1_error) + } + *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_3, __pyx_pybuffernd_mask.diminfo[1].strides) = 1.0; + + /* "SAR_GEO.pyx":121 + * temp_row=int(floor(rlist[i])) + * temp_col=int(ceil(clist[i])) + * if temp_row>=0 and temp_col>=0 and temp_row=0 and temp_col>=0 and temp_row= __pyx_pybuffernd_rlist.diminfo[0].shape)) __pyx_t_1 = 0; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 125, __pyx_L1_error) + } + __pyx_v_temp_row = ((int)ceil((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_rlist.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_rlist.diminfo[0].strides)))); + + /* "SAR_GEO.pyx":126 + * # 3 + * temp_row=int(ceil(rlist[i])) + * temp_col=int(floor(clist[i])) # <<<<<<<<<<<<<< + * if temp_row>=0 and temp_col>=0 and temp_row= __pyx_pybuffernd_clist.diminfo[0].shape)) __pyx_t_1 = 0; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 126, __pyx_L1_error) + } + __pyx_v_temp_col = ((int)floor((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_clist.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_clist.diminfo[0].strides)))); + + /* "SAR_GEO.pyx":127 + * temp_row=int(ceil(rlist[i])) + * temp_col=int(floor(clist[i])) + * if temp_row>=0 and temp_col>=0 and temp_row= 0) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_col >= 0) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_row < __pyx_v_height) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_col < __pyx_v_width) != 0); + __pyx_t_2 = __pyx_t_4; + __pyx_L16_bool_binop_done:; + if (__pyx_t_2) { + + /* "SAR_GEO.pyx":128 + * temp_col=int(floor(clist[i])) + * if temp_row>=0 and temp_col>=0 and temp_row= __pyx_pybuffernd_mask.diminfo[0].shape)) __pyx_t_1 = 0; + if (__pyx_t_5 < 0) { + __pyx_t_5 += __pyx_pybuffernd_mask.diminfo[1].shape; + if (unlikely(__pyx_t_5 < 0)) __pyx_t_1 = 1; + } else if (unlikely(__pyx_t_5 >= __pyx_pybuffernd_mask.diminfo[1].shape)) __pyx_t_1 = 1; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 128, __pyx_L1_error) + } + *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_mask.diminfo[1].strides) = 1.0; + + /* "SAR_GEO.pyx":127 + * temp_row=int(ceil(rlist[i])) + * temp_col=int(floor(clist[i])) + * if temp_row>=0 and temp_col>=0 and temp_row=0 and temp_col>=0 and temp_row= __pyx_pybuffernd_rlist.diminfo[0].shape)) __pyx_t_1 = 0; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 130, __pyx_L1_error) + } + __pyx_v_temp_row = ((int)floor((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_rlist.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_rlist.diminfo[0].strides)))); + + /* "SAR_GEO.pyx":131 + * # 4 + * temp_row=int(floor(rlist[i])) + * temp_col=int(floor(clist[i])) # <<<<<<<<<<<<<< + * if temp_row>=0 and temp_col>=0 and temp_row= __pyx_pybuffernd_clist.diminfo[0].shape)) __pyx_t_1 = 0; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 131, __pyx_L1_error) + } + __pyx_v_temp_col = ((int)floor((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_clist.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_clist.diminfo[0].strides)))); + + /* "SAR_GEO.pyx":132 + * temp_row=int(floor(rlist[i])) + * temp_col=int(floor(clist[i])) + * if temp_row>=0 and temp_col>=0 and temp_row= 0) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L21_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_col >= 0) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L21_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_row < __pyx_v_height) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L21_bool_binop_done; + } + __pyx_t_4 = ((__pyx_v_temp_col < __pyx_v_width) != 0); + __pyx_t_2 = __pyx_t_4; + __pyx_L21_bool_binop_done:; + if (__pyx_t_2) { + + /* "SAR_GEO.pyx":133 + * temp_col=int(floor(clist[i])) + * if temp_row>=0 and temp_col>=0 and temp_row= __pyx_pybuffernd_mask.diminfo[0].shape)) __pyx_t_1 = 0; + if (__pyx_t_3 < 0) { + __pyx_t_3 += __pyx_pybuffernd_mask.diminfo[1].shape; + if (unlikely(__pyx_t_3 < 0)) __pyx_t_1 = 1; + } else if (unlikely(__pyx_t_3 >= __pyx_pybuffernd_mask.diminfo[1].shape)) __pyx_t_1 = 1; + if (unlikely(__pyx_t_1 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_1); + __PYX_ERR(0, 133, __pyx_L1_error) + } + *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_3, __pyx_pybuffernd_mask.diminfo[1].strides) = 1.0; + + /* "SAR_GEO.pyx":132 + * temp_row=int(floor(rlist[i])) + * temp_col=int(floor(clist[i])) + * if temp_row>=0 and temp_col>=0 and temp_row=0 and temp_col>=0 and temp_rowpybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_rlist.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("SAR_GEO.gereratorMask", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clist.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_rlist.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_7SAR_GEO_5gereratorMask(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7SAR_GEO_5gereratorMask(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_rlist = 0; + PyArrayObject *__pyx_v_clist = 0; + PyArrayObject *__pyx_v_mask = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("gereratorMask (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rlist,&__pyx_n_s_clist,&__pyx_n_s_mask,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_rlist)) != 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_clist)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("gereratorMask", 1, 3, 3, 1); __PYX_ERR(0, 99, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mask)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("gereratorMask", 1, 3, 3, 2); __PYX_ERR(0, 99, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gereratorMask") < 0)) __PYX_ERR(0, 99, __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_rlist = ((PyArrayObject *)values[0]); + __pyx_v_clist = ((PyArrayObject *)values[1]); + __pyx_v_mask = ((PyArrayObject *)values[2]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("gereratorMask", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 99, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("SAR_GEO.gereratorMask", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rlist), __pyx_ptype_5numpy_ndarray, 1, "rlist", 0))) __PYX_ERR(0, 99, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_clist), __pyx_ptype_5numpy_ndarray, 1, "clist", 0))) __PYX_ERR(0, 99, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mask), __pyx_ptype_5numpy_ndarray, 1, "mask", 0))) __PYX_ERR(0, 99, __pyx_L1_error) + __pyx_r = __pyx_pf_7SAR_GEO_4gereratorMask(__pyx_self, __pyx_v_rlist, __pyx_v_clist, __pyx_v_mask); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7SAR_GEO_4gereratorMask(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_rlist, PyArrayObject *__pyx_v_clist, PyArrayObject *__pyx_v_mask) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_clist; + __Pyx_Buffer __pyx_pybuffer_clist; + __Pyx_LocalBuf_ND __pyx_pybuffernd_mask; + __Pyx_Buffer __pyx_pybuffer_mask; + __Pyx_LocalBuf_ND __pyx_pybuffernd_rlist; + __Pyx_Buffer __pyx_pybuffer_rlist; + 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("gereratorMask", 0); + __pyx_pybuffer_rlist.pybuffer.buf = NULL; + __pyx_pybuffer_rlist.refcount = 0; + __pyx_pybuffernd_rlist.data = NULL; + __pyx_pybuffernd_rlist.rcbuffer = &__pyx_pybuffer_rlist; + __pyx_pybuffer_clist.pybuffer.buf = NULL; + __pyx_pybuffer_clist.refcount = 0; + __pyx_pybuffernd_clist.data = NULL; + __pyx_pybuffernd_clist.rcbuffer = &__pyx_pybuffer_clist; + __pyx_pybuffer_mask.pybuffer.buf = NULL; + __pyx_pybuffer_mask.refcount = 0; + __pyx_pybuffernd_mask.data = NULL; + __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_rlist.rcbuffer->pybuffer, (PyObject*)__pyx_v_rlist, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 99, __pyx_L1_error) + } + __pyx_pybuffernd_rlist.diminfo[0].strides = __pyx_pybuffernd_rlist.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_rlist.diminfo[0].shape = __pyx_pybuffernd_rlist.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_clist.rcbuffer->pybuffer, (PyObject*)__pyx_v_clist, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 99, __pyx_L1_error) + } + __pyx_pybuffernd_clist.diminfo[0].strides = __pyx_pybuffernd_clist.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_clist.diminfo[0].shape = __pyx_pybuffernd_clist.rcbuffer->pybuffer.shape[0]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 99, __pyx_L1_error) + } + __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((PyObject *)__pyx_f_7SAR_GEO_gereratorMask(__pyx_v_rlist, __pyx_v_clist, __pyx_v_mask, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clist.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_rlist.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("SAR_GEO.gereratorMask", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_clist.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_rlist.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "SAR_GEO.pyx":139 + * + * + * cdef double distance_powe(Point p1,Point p2): # <<<<<<<<<<<<<< + * return (p1.x-p2.x)**2+(p1.y-p2.y)**2 + * + */ + +static double __pyx_f_7SAR_GEO_distance_powe(struct __pyx_t_7SAR_GEO_Point __pyx_v_p1, struct __pyx_t_7SAR_GEO_Point __pyx_v_p2) { + double __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("distance_powe", 0); + + /* "SAR_GEO.pyx":140 + * + * cdef double distance_powe(Point p1,Point p2): + * return (p1.x-p2.x)**2+(p1.y-p2.y)**2 # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = (pow((__pyx_v_p1.x - __pyx_v_p2.x), 2.0) + pow((__pyx_v_p1.y - __pyx_v_p2.y), 2.0)); + goto __pyx_L0; + + /* "SAR_GEO.pyx":139 + * + * + * cdef double distance_powe(Point p1,Point p2): # <<<<<<<<<<<<<< + * return (p1.x-p2.x)**2+(p1.y-p2.y)**2 + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "SAR_GEO.pyx":149 + * + * + * cpdef np.ndarray[int,ndim=2] get_r_c(np.ndarray[double,ndim=3] ori2geo,np.ndarray[double,ndim=2] lon_lat): # <<<<<<<<<<<<<< + * cdef int p_count=lon_lat.shape[0] + * cdef int height=ori2geo.shape[1] + */ + +static PyObject *__pyx_pw_7SAR_GEO_7get_r_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyArrayObject *__pyx_f_7SAR_GEO_get_r_c(PyArrayObject *__pyx_v_ori2geo, PyArrayObject *__pyx_v_lon_lat, CYTHON_UNUSED int __pyx_skip_dispatch) { + int __pyx_v_p_count; + CYTHON_UNUSED int __pyx_v_height; + CYTHON_UNUSED int __pyx_v_width; + CYTHON_UNUSED int __pyx_v_i; + CYTHON_UNUSED int __pyx_v_j; + int __pyx_v_c; + CYTHON_UNUSED double __pyx_v_dist; + CYTHON_UNUSED double __pyx_v_temp_dist; + struct __pyx_t_7SAR_GEO_Point __pyx_v_p1; + struct __pyx_t_7SAR_GEO_Point __pyx_v_p2; + CYTHON_UNUSED PyArrayObject *__pyx_v_result = 0; + double __pyx_v_min_lon; + double __pyx_v_max_lon; + double __pyx_v_min_lat; + double __pyx_v_max_lat; + __Pyx_LocalBuf_ND __pyx_pybuffernd_lon_lat; + __Pyx_Buffer __pyx_pybuffer_lon_lat; + __Pyx_LocalBuf_ND __pyx_pybuffernd_ori2geo; + __Pyx_Buffer __pyx_pybuffer_ori2geo; + __Pyx_LocalBuf_ND __pyx_pybuffernd_result; + __Pyx_Buffer __pyx_pybuffer_result; + PyArrayObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyArrayObject *__pyx_t_5 = NULL; + double __pyx_t_6; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + Py_ssize_t __pyx_t_9; + int __pyx_t_10; + int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_r_c", 0); + __pyx_pybuffer_result.pybuffer.buf = NULL; + __pyx_pybuffer_result.refcount = 0; + __pyx_pybuffernd_result.data = NULL; + __pyx_pybuffernd_result.rcbuffer = &__pyx_pybuffer_result; + __pyx_pybuffer_ori2geo.pybuffer.buf = NULL; + __pyx_pybuffer_ori2geo.refcount = 0; + __pyx_pybuffernd_ori2geo.data = NULL; + __pyx_pybuffernd_ori2geo.rcbuffer = &__pyx_pybuffer_ori2geo; + __pyx_pybuffer_lon_lat.pybuffer.buf = NULL; + __pyx_pybuffer_lon_lat.refcount = 0; + __pyx_pybuffernd_lon_lat.data = NULL; + __pyx_pybuffernd_lon_lat.rcbuffer = &__pyx_pybuffer_lon_lat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ori2geo.rcbuffer->pybuffer, (PyObject*)__pyx_v_ori2geo, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 149, __pyx_L1_error) + } + __pyx_pybuffernd_ori2geo.diminfo[0].strides = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ori2geo.diminfo[0].shape = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ori2geo.diminfo[1].strides = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ori2geo.diminfo[1].shape = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_ori2geo.diminfo[2].strides = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_ori2geo.diminfo[2].shape = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon_lat.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon_lat, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 149, __pyx_L1_error) + } + __pyx_pybuffernd_lon_lat.diminfo[0].strides = __pyx_pybuffernd_lon_lat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lon_lat.diminfo[0].shape = __pyx_pybuffernd_lon_lat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_lon_lat.diminfo[1].strides = __pyx_pybuffernd_lon_lat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_lon_lat.diminfo[1].shape = __pyx_pybuffernd_lon_lat.rcbuffer->pybuffer.shape[1]; + + /* "SAR_GEO.pyx":150 + * + * cpdef np.ndarray[int,ndim=2] get_r_c(np.ndarray[double,ndim=3] ori2geo,np.ndarray[double,ndim=2] lon_lat): + * cdef int p_count=lon_lat.shape[0] # <<<<<<<<<<<<<< + * cdef int height=ori2geo.shape[1] + * cdef int width=ori2geo.shape[2] + */ + __pyx_v_p_count = (__pyx_v_lon_lat->dimensions[0]); + + /* "SAR_GEO.pyx":151 + * cpdef np.ndarray[int,ndim=2] get_r_c(np.ndarray[double,ndim=3] ori2geo,np.ndarray[double,ndim=2] lon_lat): + * cdef int p_count=lon_lat.shape[0] + * cdef int height=ori2geo.shape[1] # <<<<<<<<<<<<<< + * cdef int width=ori2geo.shape[2] + * cdef int i=0 + */ + __pyx_v_height = (__pyx_v_ori2geo->dimensions[1]); + + /* "SAR_GEO.pyx":152 + * cdef int p_count=lon_lat.shape[0] + * cdef int height=ori2geo.shape[1] + * cdef int width=ori2geo.shape[2] # <<<<<<<<<<<<<< + * cdef int i=0 + * cdef int j=0 + */ + __pyx_v_width = (__pyx_v_ori2geo->dimensions[2]); + + /* "SAR_GEO.pyx":153 + * cdef int height=ori2geo.shape[1] + * cdef int width=ori2geo.shape[2] + * cdef int i=0 # <<<<<<<<<<<<<< + * cdef int j=0 + * cdef int c=0 + */ + __pyx_v_i = 0; + + /* "SAR_GEO.pyx":154 + * cdef int width=ori2geo.shape[2] + * cdef int i=0 + * cdef int j=0 # <<<<<<<<<<<<<< + * cdef int c=0 + * cdef double dist=999 + */ + __pyx_v_j = 0; + + /* "SAR_GEO.pyx":155 + * cdef int i=0 + * cdef int j=0 + * cdef int c=0 # <<<<<<<<<<<<<< + * cdef double dist=999 + * cdef double temp_dist=0 + */ + __pyx_v_c = 0; + + /* "SAR_GEO.pyx":156 + * cdef int j=0 + * cdef int c=0 + * cdef double dist=999 # <<<<<<<<<<<<<< + * cdef double temp_dist=0 + * cdef Point p1 + */ + __pyx_v_dist = 999.0; + + /* "SAR_GEO.pyx":157 + * cdef int c=0 + * cdef double dist=999 + * cdef double temp_dist=0 # <<<<<<<<<<<<<< + * cdef Point p1 + * cdef Point p2 + */ + __pyx_v_temp_dist = 0.0; + + /* "SAR_GEO.pyx":162 + * cdef int min_i + * cdef int min_j + * cdef np.ndarray[double,ndim=2] result=np.ones((p_count,2))*-1 # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_p_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); + __Pyx_INCREF(__pyx_int_2); + __Pyx_GIVEREF(__pyx_int_2); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_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_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(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_int_neg_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 162, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_3); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_result.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { + __pyx_v_result = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_result.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 162, __pyx_L1_error) + } else {__pyx_pybuffernd_result.diminfo[0].strides = __pyx_pybuffernd_result.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_result.diminfo[0].shape = __pyx_pybuffernd_result.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_result.diminfo[1].strides = __pyx_pybuffernd_result.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_result.diminfo[1].shape = __pyx_pybuffernd_result.rcbuffer->pybuffer.shape[1]; + } + } + __pyx_t_5 = 0; + __pyx_v_result = ((PyArrayObject *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "SAR_GEO.pyx":166 + * + * # + * cdef double min_lon=np.min(ori2geo[0,:,:]) # <<<<<<<<<<<<<< + * cdef double max_lon=np.max(ori2geo[0,:,:]) + * cdef double min_lat=np.min(ori2geo[1,:,:]) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_min); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ori2geo), __pyx_tuple__2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_min_lon = __pyx_t_6; + + /* "SAR_GEO.pyx":167 + * # + * cdef double min_lon=np.min(ori2geo[0,:,:]) + * cdef double max_lon=np.max(ori2geo[0,:,:]) # <<<<<<<<<<<<<< + * cdef double min_lat=np.min(ori2geo[1,:,:]) + * cdef double max_lat=np.max(ori2geo[1,:,:]) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_max); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ori2geo), __pyx_tuple__2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + } + } + __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __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_3)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_max_lon = __pyx_t_6; + + /* "SAR_GEO.pyx":168 + * cdef double min_lon=np.min(ori2geo[0,:,:]) + * cdef double max_lon=np.max(ori2geo[0,:,:]) + * cdef double min_lat=np.min(ori2geo[1,:,:]) # <<<<<<<<<<<<<< + * cdef double max_lat=np.max(ori2geo[1,:,:]) + * while cp1.x or max_lonmax_lat: + */ + __pyx_t_8 = __pyx_v_c; + __pyx_t_9 = 0; + __pyx_t_10 = -1; + if (__pyx_t_8 < 0) { + __pyx_t_8 += __pyx_pybuffernd_lon_lat.diminfo[0].shape; + if (unlikely(__pyx_t_8 < 0)) __pyx_t_10 = 0; + } else if (unlikely(__pyx_t_8 >= __pyx_pybuffernd_lon_lat.diminfo[0].shape)) __pyx_t_10 = 0; + if (__pyx_t_9 < 0) { + __pyx_t_9 += __pyx_pybuffernd_lon_lat.diminfo[1].shape; + if (unlikely(__pyx_t_9 < 0)) __pyx_t_10 = 1; + } else if (unlikely(__pyx_t_9 >= __pyx_pybuffernd_lon_lat.diminfo[1].shape)) __pyx_t_10 = 1; + if (unlikely(__pyx_t_10 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_10); + __PYX_ERR(0, 171, __pyx_L1_error) + } + __pyx_v_p1.x = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_lon_lat.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_lon_lat.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_lon_lat.diminfo[1].strides)); + + /* "SAR_GEO.pyx":172 + * while cp1.x or max_lonmax_lat: + * continue + */ + __pyx_t_9 = __pyx_v_c; + __pyx_t_8 = 1; + __pyx_t_10 = -1; + if (__pyx_t_9 < 0) { + __pyx_t_9 += __pyx_pybuffernd_lon_lat.diminfo[0].shape; + if (unlikely(__pyx_t_9 < 0)) __pyx_t_10 = 0; + } else if (unlikely(__pyx_t_9 >= __pyx_pybuffernd_lon_lat.diminfo[0].shape)) __pyx_t_10 = 0; + if (__pyx_t_8 < 0) { + __pyx_t_8 += __pyx_pybuffernd_lon_lat.diminfo[1].shape; + if (unlikely(__pyx_t_8 < 0)) __pyx_t_10 = 1; + } else if (unlikely(__pyx_t_8 >= __pyx_pybuffernd_lon_lat.diminfo[1].shape)) __pyx_t_10 = 1; + if (unlikely(__pyx_t_10 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_10); + __PYX_ERR(0, 172, __pyx_L1_error) + } + __pyx_v_p1.y = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_lon_lat.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_lon_lat.diminfo[0].strides, __pyx_t_8, __pyx_pybuffernd_lon_lat.diminfo[1].strides)); + + /* "SAR_GEO.pyx":173 + * p1.x=lon_lat[c,0] + * p1.y=lon_lat[c,1] + * if min_lon>p1.x or max_lonmax_lat: # <<<<<<<<<<<<<< + * continue + * c=c+1 + */ + __pyx_t_11 = ((__pyx_v_min_lon > __pyx_v_p1.x) != 0); + if (!__pyx_t_11) { + } else { + __pyx_t_7 = __pyx_t_11; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_11 = ((__pyx_v_max_lon < __pyx_v_p1.x) != 0); + if (!__pyx_t_11) { + } else { + __pyx_t_7 = __pyx_t_11; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_11 = ((__pyx_v_p2.y < __pyx_v_min_lat) != 0); + if (!__pyx_t_11) { + } else { + __pyx_t_7 = __pyx_t_11; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_11 = ((__pyx_v_p2.y > __pyx_v_max_lat) != 0); + __pyx_t_7 = __pyx_t_11; + __pyx_L6_bool_binop_done:; + if (__pyx_t_7) { + + /* "SAR_GEO.pyx":174 + * p1.y=lon_lat[c,1] + * if min_lon>p1.x or max_lonmax_lat: + * continue # <<<<<<<<<<<<<< + * c=c+1 + * + */ + goto __pyx_L3_continue; + + /* "SAR_GEO.pyx":173 + * p1.x=lon_lat[c,0] + * p1.y=lon_lat[c,1] + * if min_lon>p1.x or max_lonmax_lat: # <<<<<<<<<<<<<< + * continue + * c=c+1 + */ + } + + /* "SAR_GEO.pyx":175 + * if min_lon>p1.x or max_lonmax_lat: + * continue + * c=c+1 # <<<<<<<<<<<<<< + * + * + */ + __pyx_v_c = (__pyx_v_c + 1); + __pyx_L3_continue:; + } + + /* "SAR_GEO.pyx":149 + * + * + * cpdef np.ndarray[int,ndim=2] get_r_c(np.ndarray[double,ndim=3] ori2geo,np.ndarray[double,ndim=2] lon_lat): # <<<<<<<<<<<<<< + * cdef int p_count=lon_lat.shape[0] + * cdef int height=ori2geo.shape[1] + */ + + /* function exit code */ + __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon_lat.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_result.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("SAR_GEO.get_r_c", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon_lat.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_result.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_result); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_7SAR_GEO_7get_r_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7SAR_GEO_7get_r_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_ori2geo = 0; + PyArrayObject *__pyx_v_lon_lat = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get_r_c (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ori2geo,&__pyx_n_s_lon_lat,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_ori2geo)) != 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_lon_lat)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_r_c", 1, 2, 2, 1); __PYX_ERR(0, 149, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_r_c") < 0)) __PYX_ERR(0, 149, __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_ori2geo = ((PyArrayObject *)values[0]); + __pyx_v_lon_lat = ((PyArrayObject *)values[1]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("get_r_c", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 149, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("SAR_GEO.get_r_c", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ori2geo), __pyx_ptype_5numpy_ndarray, 1, "ori2geo", 0))) __PYX_ERR(0, 149, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lon_lat), __pyx_ptype_5numpy_ndarray, 1, "lon_lat", 0))) __PYX_ERR(0, 149, __pyx_L1_error) + __pyx_r = __pyx_pf_7SAR_GEO_6get_r_c(__pyx_self, __pyx_v_ori2geo, __pyx_v_lon_lat); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7SAR_GEO_6get_r_c(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ori2geo, PyArrayObject *__pyx_v_lon_lat) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_lon_lat; + __Pyx_Buffer __pyx_pybuffer_lon_lat; + __Pyx_LocalBuf_ND __pyx_pybuffernd_ori2geo; + __Pyx_Buffer __pyx_pybuffer_ori2geo; + 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_r_c", 0); + __pyx_pybuffer_ori2geo.pybuffer.buf = NULL; + __pyx_pybuffer_ori2geo.refcount = 0; + __pyx_pybuffernd_ori2geo.data = NULL; + __pyx_pybuffernd_ori2geo.rcbuffer = &__pyx_pybuffer_ori2geo; + __pyx_pybuffer_lon_lat.pybuffer.buf = NULL; + __pyx_pybuffer_lon_lat.refcount = 0; + __pyx_pybuffernd_lon_lat.data = NULL; + __pyx_pybuffernd_lon_lat.rcbuffer = &__pyx_pybuffer_lon_lat; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ori2geo.rcbuffer->pybuffer, (PyObject*)__pyx_v_ori2geo, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 149, __pyx_L1_error) + } + __pyx_pybuffernd_ori2geo.diminfo[0].strides = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ori2geo.diminfo[0].shape = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ori2geo.diminfo[1].strides = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ori2geo.diminfo[1].shape = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_ori2geo.diminfo[2].strides = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_ori2geo.diminfo[2].shape = __pyx_pybuffernd_ori2geo.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_lon_lat.rcbuffer->pybuffer, (PyObject*)__pyx_v_lon_lat, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 149, __pyx_L1_error) + } + __pyx_pybuffernd_lon_lat.diminfo[0].strides = __pyx_pybuffernd_lon_lat.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_lon_lat.diminfo[0].shape = __pyx_pybuffernd_lon_lat.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_lon_lat.diminfo[1].strides = __pyx_pybuffernd_lon_lat.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_lon_lat.diminfo[1].shape = __pyx_pybuffernd_lon_lat.rcbuffer->pybuffer.shape[1]; + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((PyObject *)__pyx_f_7SAR_GEO_get_r_c(__pyx_v_ori2geo, __pyx_v_lon_lat, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon_lat.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("SAR_GEO.get_r_c", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_lon_lat.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ori2geo.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "SAR_GEO.pyx":188 + * + * # + * cpdef np.ndarray[double,ndim=2] Add(np.ndarray[double,ndim=2] a,double x): # <<<<<<<<<<<<<< + * cdef double d=0; # cython bool + * print("") + */ + +static PyObject *__pyx_pw_7SAR_GEO_9Add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyArrayObject *__pyx_f_7SAR_GEO_Add(PyArrayObject *__pyx_v_a, double __pyx_v_x, CYTHON_UNUSED int __pyx_skip_dispatch) { + CYTHON_UNUSED double __pyx_v_d; + __Pyx_LocalBuf_ND __pyx_pybuffernd_a; + __Pyx_Buffer __pyx_pybuffer_a; + PyArrayObject *__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("Add", 0); + __pyx_pybuffer_a.pybuffer.buf = NULL; + __pyx_pybuffer_a.refcount = 0; + __pyx_pybuffernd_a.data = NULL; + __pyx_pybuffernd_a.rcbuffer = &__pyx_pybuffer_a; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_a, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 188, __pyx_L1_error) + } + __pyx_pybuffernd_a.diminfo[0].strides = __pyx_pybuffernd_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_a.diminfo[0].shape = __pyx_pybuffernd_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_a.diminfo[1].strides = __pyx_pybuffernd_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_a.diminfo[1].shape = __pyx_pybuffernd_a.rcbuffer->pybuffer.shape[1]; + + /* "SAR_GEO.pyx":189 + * # + * cpdef np.ndarray[double,ndim=2] Add(np.ndarray[double,ndim=2] a,double x): + * cdef double d=0; # cython bool # <<<<<<<<<<<<<< + * print("") + * print(a) + */ + __pyx_v_d = 0.0; + + /* "SAR_GEO.pyx":190 + * cpdef np.ndarray[double,ndim=2] Add(np.ndarray[double,ndim=2] a,double x): + * cdef double d=0; # cython bool + * print("") # <<<<<<<<<<<<<< + * print(a) + * print(x) + */ + if (__Pyx_PrintOne(0, __pyx_kp_s__4) < 0) __PYX_ERR(0, 190, __pyx_L1_error) + + /* "SAR_GEO.pyx":191 + * cdef double d=0; # cython bool + * print("") + * print(a) # <<<<<<<<<<<<<< + * print(x) + * return a+x + */ + if (__Pyx_PrintOne(0, ((PyObject *)__pyx_v_a)) < 0) __PYX_ERR(0, 191, __pyx_L1_error) + + /* "SAR_GEO.pyx":192 + * print("") + * print(a) + * print(x) # <<<<<<<<<<<<<< + * return a+x + * + */ + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PrintOne(0, __pyx_t_1) < 0) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "SAR_GEO.pyx":193 + * print(a) + * print(x) + * return a+x # <<<<<<<<<<<<<< + * + */ + __Pyx_XDECREF(((PyObject *)__pyx_r)); + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyNumber_Add(((PyObject *)__pyx_v_a), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 193, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 193, __pyx_L1_error) + __pyx_r = ((PyArrayObject *)__pyx_t_2); + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "SAR_GEO.pyx":188 + * + * # + * cpdef np.ndarray[double,ndim=2] Add(np.ndarray[double,ndim=2] a,double x): # <<<<<<<<<<<<<< + * cdef double d=0; # cython bool + * print("") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_a.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("SAR_GEO.Add", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_a.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_7SAR_GEO_9Add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyObject *__pyx_pw_7SAR_GEO_9Add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_a = 0; + double __pyx_v_x; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("Add (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_a,&__pyx_n_s_x,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_a)) != 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_x)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("Add", 1, 2, 2, 1); __PYX_ERR(0, 188, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Add") < 0)) __PYX_ERR(0, 188, __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_a = ((PyArrayObject *)values[0]); + __pyx_v_x = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_x == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 188, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("Add", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 188, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("SAR_GEO.Add", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_a), __pyx_ptype_5numpy_ndarray, 1, "a", 0))) __PYX_ERR(0, 188, __pyx_L1_error) + __pyx_r = __pyx_pf_7SAR_GEO_8Add(__pyx_self, __pyx_v_a, __pyx_v_x); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_7SAR_GEO_8Add(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_a, double __pyx_v_x) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_a; + __Pyx_Buffer __pyx_pybuffer_a; + 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("Add", 0); + __pyx_pybuffer_a.pybuffer.buf = NULL; + __pyx_pybuffer_a.refcount = 0; + __pyx_pybuffernd_a.data = NULL; + __pyx_pybuffernd_a.rcbuffer = &__pyx_pybuffer_a; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_a, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 188, __pyx_L1_error) + } + __pyx_pybuffernd_a.diminfo[0].strides = __pyx_pybuffernd_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_a.diminfo[0].shape = __pyx_pybuffernd_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_a.diminfo[1].strides = __pyx_pybuffernd_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_a.diminfo[1].shape = __pyx_pybuffernd_a.rcbuffer->pybuffer.shape[1]; + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((PyObject *)__pyx_f_7SAR_GEO_Add(__pyx_v_a, __pyx_v_x, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_a.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("SAR_GEO.Add", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_a.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":735 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { + 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("PyArray_MultiIterNew1", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":736 + * + * cdef inline object PyArray_MultiIterNew1(a): + * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew2(a, b): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 736, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":735 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":738 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { + 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("PyArray_MultiIterNew2", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":739 + * + * cdef inline object PyArray_MultiIterNew2(a, b): + * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 739, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":738 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":741 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { + 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("PyArray_MultiIterNew3", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":742 + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 742, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":741 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":744 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { + 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("PyArray_MultiIterNew4", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":745 + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 745, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":744 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":747 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { + 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("PyArray_MultiIterNew5", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":748 + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 748, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":747 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":750 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("PyDataType_SHAPE", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":751 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + __pyx_t_1 = (PyDataType_HASSUBARRAY(__pyx_v_d) != 0); + if (__pyx_t_1) { + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":752 + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape # <<<<<<<<<<<<<< + * else: + * return () + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape)); + __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":751 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + } + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":754 + * return d.subarray.shape + * else: + * return () # <<<<<<<<<<<<<< + * + * + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_empty_tuple); + __pyx_r = __pyx_empty_tuple; + goto __pyx_L0; + } + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":750 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< + * if PyDataType_HASSUBARRAY(d): + * return d.subarray.shape + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":931 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ + +static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_array_base", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":932 + * + * cdef inline void set_array_base(ndarray arr, object base): + * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< + * PyArray_SetBaseObject(arr, base) + * + */ + Py_INCREF(__pyx_v_base); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":933 + * cdef inline void set_array_base(ndarray arr, object base): + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< + * + * cdef inline object get_array_base(ndarray arr): + */ + (void)(PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base)); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":931 + * int _import_umath() except -1 + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * Py_INCREF(base) # important to do this before stealing the reference below! + * PyArray_SetBaseObject(arr, base) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":935 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { + PyObject *__pyx_v_base; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("get_array_base", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":936 + * + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< + * if base is NULL: + * return None + */ + __pyx_v_base = PyArray_BASE(__pyx_v_arr); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":937 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + __pyx_t_1 = ((__pyx_v_base == NULL) != 0); + if (__pyx_t_1) { + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":938 + * base = PyArray_BASE(arr) + * if base is NULL: + * return None # <<<<<<<<<<<<<< + * return base + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":937 + * cdef inline object get_array_base(ndarray arr): + * base = PyArray_BASE(arr) + * if base is NULL: # <<<<<<<<<<<<<< + * return None + * return base + */ + } + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":939 + * if base is NULL: + * return None + * return base # <<<<<<<<<<<<<< + * + * # Versions of the import_* functions which are more suitable for + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_base)); + __pyx_r = ((PyObject *)__pyx_v_base); + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":935 + * PyArray_SetBaseObject(arr, base) + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * base = PyArray_BASE(arr) + * if base is NULL: + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":943 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + 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("import_array", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":944 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":945 + * cdef inline int import_array() except -1: + * try: + * __pyx_import_array() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") + */ + __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 945, __pyx_L3_error) + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":944 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":946 + * try: + * __pyx_import_array() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.multiarray failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 946, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":947 + * __pyx_import_array() + * except Exception: + * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_umath() except -1: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 947, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(1, 947, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":944 + * # Cython code. + * cdef inline int import_array() except -1: + * try: # <<<<<<<<<<<<<< + * __pyx_import_array() + * except Exception: + */ + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":943 + * # Versions of the import_* functions which are more suitable for + * # Cython code. + * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< + * try: + * __pyx_import_array() + */ + + /* function exit code */ + __pyx_r = 0; + 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("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":949 + * raise ImportError("numpy.core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + 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("import_umath", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":950 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":951 + * cdef inline int import_umath() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.umath failed to import") + */ + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 951, __pyx_L3_error) + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":950 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":952 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.umath failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 952, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":953 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef inline int import_ufunc() except -1: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 953, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(1, 953, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":950 + * + * cdef inline int import_umath() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":949 + * raise ImportError("numpy.core.multiarray failed to import") + * + * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + + /* function exit code */ + __pyx_r = 0; + 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("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":955 + * raise ImportError("numpy.core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + +static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + 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("import_ufunc", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":956 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":957 + * cdef inline int import_ufunc() except -1: + * try: + * _import_umath() # <<<<<<<<<<<<<< + * except Exception: + * raise ImportError("numpy.core.umath failed to import") + */ + __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 957, __pyx_L3_error) + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":956 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":958 + * try: + * _import_umath() + * except Exception: # <<<<<<<<<<<<<< + * raise ImportError("numpy.core.umath failed to import") + * + */ + __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_4) { + __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 958, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GOTREF(__pyx_t_7); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":959 + * _import_umath() + * except Exception: + * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< + * + * cdef extern from *: + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 959, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_Raise(__pyx_t_8, 0, 0, 0); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __PYX_ERR(1, 959, __pyx_L5_except_error) + } + goto __pyx_L5_except_error; + __pyx_L5_except_error:; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":956 + * + * cdef inline int import_ufunc() except -1: + * try: # <<<<<<<<<<<<<< + * _import_umath() + * except Exception: + */ + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L8_try_end:; + } + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":955 + * raise ImportError("numpy.core.umath failed to import") + * + * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< + * try: + * _import_umath() + */ + + /* function exit code */ + __pyx_r = 0; + 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("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":969 + * + * + * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ + +static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_timedelta64_object", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":981 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":969 + * + * + * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.timedelta64)` + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":984 + * + * + * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ + +static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("is_datetime64_object", 0); + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":996 + * bool + * """ + * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":984 + * + * + * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< + * """ + * Cython equivalent of `isinstance(obj, np.datetime64)` + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":999 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ + +static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { + npy_datetime __pyx_r; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1006 + * also needed. That can be found using `get_datetime64_unit`. + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":999 + * + * + * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy datetime64 object + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1009 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ + +static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { + npy_timedelta __pyx_r; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1013 + * returns the int64 value underlying scalar numpy timedelta64 object + * """ + * return (obj).obval # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1009 + * + * + * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the int64 value underlying scalar numpy timedelta64 object + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +/* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1016 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + +static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { + NPY_DATETIMEUNIT __pyx_r; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1020 + * returns the unit part of the dtype for a numpy datetime64 object. + * """ + * return (obj).obmeta.base # <<<<<<<<<<<<<< + */ + __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); + goto __pyx_L0; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1016 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + + /* function exit code */ + __pyx_L0:; + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {"insert_data", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7SAR_GEO_1insert_data, METH_VARARGS|METH_KEYWORDS, 0}, + {"cut_L1A_img", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7SAR_GEO_3cut_L1A_img, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7SAR_GEO_2cut_L1A_img}, + {"gereratorMask", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7SAR_GEO_5gereratorMask, METH_VARARGS|METH_KEYWORDS, 0}, + {"get_r_c", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7SAR_GEO_7get_r_c, METH_VARARGS|METH_KEYWORDS, 0}, + {"Add", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7SAR_GEO_9Add, METH_VARARGS|METH_KEYWORDS, 0}, + {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_SAR_GEO(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_SAR_GEO}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "SAR_GEO", + 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_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, + {&__pyx_kp_s__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 0, 1, 0}, + {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 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_clist, __pyx_k_clist, sizeof(__pyx_k_clist), 0, 0, 1, 1}, + {&__pyx_n_s_col_ids, __pyx_k_col_ids, sizeof(__pyx_k_col_ids), 0, 0, 1, 1}, + {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, + {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, + {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1}, + {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1}, + {&__pyx_n_s_float64, __pyx_k_float64, sizeof(__pyx_k_float64), 0, 0, 1, 1}, + {&__pyx_n_s_griddata, __pyx_k_griddata, sizeof(__pyx_k_griddata), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_lon_lat, __pyx_k_lon_lat, sizeof(__pyx_k_lon_lat), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_mask, __pyx_k_mask, sizeof(__pyx_k_mask), 0, 0, 1, 1}, + {&__pyx_n_s_max, __pyx_k_max, sizeof(__pyx_k_max), 0, 0, 1, 1}, + {&__pyx_n_s_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_nan, __pyx_k_nan, sizeof(__pyx_k_nan), 0, 0, 1, 1}, + {&__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_kp_s_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 0, 1, 0}, + {&__pyx_kp_s_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 0, 1, 0}, + {&__pyx_n_s_ones, __pyx_k_ones, sizeof(__pyx_k_ones), 0, 0, 1, 1}, + {&__pyx_n_s_ori2geo, __pyx_k_ori2geo, sizeof(__pyx_k_ori2geo), 0, 0, 1, 1}, + {&__pyx_n_s_ori2geo_img, __pyx_k_ori2geo_img, sizeof(__pyx_k_ori2geo_img), 0, 0, 1, 1}, + {&__pyx_n_s_os, __pyx_k_os, sizeof(__pyx_k_os), 0, 0, 1, 1}, + {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1}, + {&__pyx_n_s_rlist, __pyx_k_rlist, sizeof(__pyx_k_rlist), 0, 0, 1, 1}, + {&__pyx_n_s_roi_list, __pyx_k_roi_list, sizeof(__pyx_k_roi_list), 0, 0, 1, 1}, + {&__pyx_n_s_row_ids, __pyx_k_row_ids, sizeof(__pyx_k_row_ids), 0, 0, 1, 1}, + {&__pyx_n_s_scipy_interpolate, __pyx_k_scipy_interpolate, sizeof(__pyx_k_scipy_interpolate), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1}, + {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 947, __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); + + /* "SAR_GEO.pyx":166 + * + * # + * cdef double min_lon=np.min(ori2geo[0,:,:]) # <<<<<<<<<<<<<< + * cdef double max_lon=np.max(ori2geo[0,:,:]) + * cdef double min_lat=np.min(ori2geo[1,:,:]) + */ + __pyx_slice_ = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice_)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice_); + __Pyx_GIVEREF(__pyx_slice_); + __pyx_tuple__2 = PyTuple_Pack(3, __pyx_int_0, __pyx_slice_, __pyx_slice_); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "SAR_GEO.pyx":168 + * cdef double min_lon=np.min(ori2geo[0,:,:]) + * cdef double max_lon=np.max(ori2geo[0,:,:]) + * cdef double min_lat=np.min(ori2geo[1,:,:]) # <<<<<<<<<<<<<< + * cdef double max_lat=np.max(ori2geo[1,:,:]) + * while c= 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_SAR_GEO(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + 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 'SAR_GEO' 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_SAR_GEO(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(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #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("SAR_GEO", __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_SAR_GEO) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "SAR_GEO")) { + if (unlikely(PyDict_SetItemString(modules, "SAR_GEO", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + (void)__Pyx_modinit_type_init_code(); + if (unlikely(__Pyx_modinit_type_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "SAR_GEO.pyx":1 + * import os # <<<<<<<<<<<<<< + * cimport cython # + * import numpy as np##cpythonnp + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_os, 0, -1); 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_os, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "SAR_GEO.pyx":3 + * import os + * cimport cython # + * import numpy as np##cpythonnp # <<<<<<<<<<<<<< + * cimport numpy as np # cpythonnp + * from libc.math cimport pi,ceil,floor + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "SAR_GEO.pyx":6 + * cimport numpy as np # cpythonnp + * from libc.math cimport pi,ceil,floor + * from scipy.interpolate import griddata # <<<<<<<<<<<<<< + * + * + */ + __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_griddata); + __Pyx_GIVEREF(__pyx_n_s_griddata); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_griddata); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_scipy_interpolate, __pyx_t_1, -1); 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; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_griddata); 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_griddata, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "SAR_GEO.pyx":1 + * import os # <<<<<<<<<<<<<< + * cimport cython # + * import numpy as np##cpythonnp + */ + __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; + + /* "../../../../../Anaconda/envs/micro/lib/site-packages/numpy/__init__.pxd":1016 + * + * + * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< + * """ + * returns the unit part of the dtype for a numpy datetime64 object. + */ + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init SAR_GEO", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init SAR_GEO"); + } + __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 + +/* 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; + } + } + } +} + +/* BufferGetAndValidate */ + static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { + if (unlikely(info->buf == NULL)) return; + if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; + __Pyx_ReleaseBuffer(info); +} +static void __Pyx_ZeroBuffer(Py_buffer* buf) { + buf->buf = NULL; + buf->obj = NULL; + buf->strides = __Pyx_zeros; + buf->shape = __Pyx_zeros; + buf->suboffsets = __Pyx_minusones; +} +static int __Pyx__GetBufferAndValidate( + Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, + int nd, int cast, __Pyx_BufFmt_StackElem* stack) +{ + buf->buf = NULL; + if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) { + __Pyx_ZeroBuffer(buf); + return -1; + } + if (unlikely(buf->ndim != nd)) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + nd, buf->ndim); + goto fail; + } + if (!cast) { + __Pyx_BufFmt_Context ctx; + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; + } + if (unlikely((size_t)buf->itemsize != dtype->size)) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", + buf->itemsize, (buf->itemsize > 1) ? "s" : "", + dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; + return 0; +fail:; + __Pyx_SafeReleaseBuffer(buf); + return -1; +} + +/* BufferIndexError */ + static void __Pyx_RaiseBufferIndexError(int axis) { + PyErr_Format(PyExc_IndexError, + "Out of bounds on buffer access (axis %d)", axis); +} + +/* 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 + +/* WriteUnraisableException */ + static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, + CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename, + int full_traceback, CYTHON_UNUSED int nogil) { + PyObject *old_exc, *old_val, *old_tb; + PyObject *ctx; + __Pyx_PyThreadState_declare +#ifdef WITH_THREAD + PyGILState_STATE state; + if (nogil) + state = PyGILState_Ensure(); +#ifdef _MSC_VER + else state = (PyGILState_STATE)-1; +#endif +#endif + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); + if (full_traceback) { + Py_XINCREF(old_exc); + Py_XINCREF(old_val); + Py_XINCREF(old_tb); + __Pyx_ErrRestore(old_exc, old_val, old_tb); + PyErr_PrintEx(1); + } + #if PY_MAJOR_VERSION < 3 + ctx = PyString_FromString(name); + #else + ctx = PyUnicode_FromString(name); + #endif + __Pyx_ErrRestore(old_exc, old_val, old_tb); + if (!ctx) { + PyErr_WriteUnraisable(Py_None); + } else { + PyErr_WriteUnraisable(ctx); + Py_DECREF(ctx); + } +#ifdef WITH_THREAD + if (nogil) + PyGILState_Release(state); +#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; +} + +/* 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; +} + +/* 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); +} + +/* PyObjectCall */ + #if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->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 + +/* 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; +} + +/* 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 (__Pyx_PyFastCFunction_Check(func)) { + 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 + +/* 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 + +/* 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 + +/* 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 + +/* 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; +} + +/* 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 + +/* TypeImport */ + #ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, + size_t size, enum __Pyx_ImportType_CheckSize check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; +#ifdef Py_LIMITED_API + PyObject *py_basicsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#ifndef Py_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if ((size_t)basicsize < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* 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; +} + +/* 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); + 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 + + + /* 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;\ + } + +/* Print */ + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 +static PyObject *__Pyx_GetStdout(void) { + PyObject *f = PySys_GetObject((char *)"stdout"); + if (!f) { + PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); + } + return f; +} +static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) { + int i; + if (!f) { + if (!(f = __Pyx_GetStdout())) + return -1; + } + Py_INCREF(f); + for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) { + PyObject* v; + if (PyFile_SoftSpace(f, 1)) { + if (PyFile_WriteString(" ", f) < 0) + goto error; + } + v = PyTuple_GET_ITEM(arg_tuple, i); + if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) + goto error; + if (PyString_Check(v)) { + char *s = PyString_AsString(v); + Py_ssize_t len = PyString_Size(v); + if (len > 0) { + switch (s[len-1]) { + case ' ': break; + case '\f': case '\r': case '\n': case '\t': case '\v': + PyFile_SoftSpace(f, 0); + break; + default: break; + } + } + } + } + if (newline) { + if (PyFile_WriteString("\n", f) < 0) + goto error; + PyFile_SoftSpace(f, 0); + } + Py_DECREF(f); + return 0; +error: + Py_DECREF(f); + return -1; +} +#else +static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) { + PyObject* kwargs = 0; + PyObject* result = 0; + PyObject* end_string; + if (unlikely(!__pyx_print)) { + __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s_print); + if (!__pyx_print) + return -1; + } + if (stream) { + kwargs = PyDict_New(); + if (unlikely(!kwargs)) + return -1; + if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s_file, stream) < 0)) + goto bad; + if (!newline) { + end_string = PyUnicode_FromStringAndSize(" ", 1); + if (unlikely(!end_string)) + goto bad; + if (PyDict_SetItem(kwargs, __pyx_n_s_end, end_string) < 0) { + Py_DECREF(end_string); + goto bad; + } + Py_DECREF(end_string); + } + } else if (!newline) { + if (unlikely(!__pyx_print_kwargs)) { + __pyx_print_kwargs = PyDict_New(); + if (unlikely(!__pyx_print_kwargs)) + return -1; + end_string = PyUnicode_FromStringAndSize(" ", 1); + if (unlikely(!end_string)) + return -1; + if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s_end, end_string) < 0) { + Py_DECREF(end_string); + return -1; + } + Py_DECREF(end_string); + } + kwargs = __pyx_print_kwargs; + } + result = PyObject_Call(__pyx_print, arg_tuple, kwargs); + if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs)) + Py_DECREF(kwargs); + if (!result) + return -1; + Py_DECREF(result); + return 0; +bad: + if (kwargs != __pyx_print_kwargs) + Py_XDECREF(kwargs); + return -1; +} +#endif + +/* Declarations */ + #if CYTHON_CCOMPLEX + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return ::std::complex< float >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return x + y*(__pyx_t_float_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + __pyx_t_float_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +/* Arithmetic */ + #if CYTHON_CCOMPLEX +#else + static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + #if 1 + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabsf(b.real) >= fabsf(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + float r = b.imag / b.real; + float s = (float)(1.0) / (b.real + b.imag * r); + return __pyx_t_float_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + float r = b.real / b.imag; + float s = (float)(1.0) / (b.imag + b.real * r); + return __pyx_t_float_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } + } + #else + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + float denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_float_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } + } + #endif + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrtf(z.real*z.real + z.imag*z.imag); + #else + return hypotf(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + float denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_float(a, a); + case 3: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, a); + case 4: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if (b.imag == 0) { + z.real = powf(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2f(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_float(a); + theta = atan2f(a.imag, a.real); + } + lnr = logf(r); + z_r = expf(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cosf(z_theta); + z.imag = z_r * sinf(z_theta); + return z; + } + #endif +#endif + +/* 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 + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + 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 int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } 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; +} + +/* PrintOne */ + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 +static int __Pyx_PrintOne(PyObject* f, PyObject *o) { + if (!f) { + if (!(f = __Pyx_GetStdout())) + return -1; + } + Py_INCREF(f); + if (PyFile_SoftSpace(f, 0)) { + if (PyFile_WriteString(" ", f) < 0) + goto error; + } + if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0) + goto error; + if (PyFile_WriteString("\n", f) < 0) + goto error; + Py_DECREF(f); + return 0; +error: + Py_DECREF(f); + return -1; + /* the line below is just to avoid C compiler + * warnings about unused functions */ + return __Pyx_Print(f, NULL, 0); +} +#else +static int __Pyx_PrintOne(PyObject* stream, PyObject *o) { + int res; + PyObject* arg_tuple = PyTuple_Pack(1, o); + if (unlikely(!arg_tuple)) + return -1; + res = __Pyx_Print(stream, arg_tuple, 1); + Py_DECREF(arg_tuple); + return res; +} +#endif + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + 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 long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* FastTypeChecks */ + #if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; ip) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/tool/algorithm/transforml1a/build/temp.win-amd64-3.8/Release/build/SAR_geo/SAR_GEO.cp38-win_amd64.exp b/tool/algorithm/transforml1a/build/temp.win-amd64-3.8/Release/build/SAR_geo/SAR_GEO.cp38-win_amd64.exp new file mode 100644 index 0000000000000000000000000000000000000000..ce0cc3b153d772deb3c34096a1bcf68893c73893 GIT binary patch literal 769 zcmZ`%&2G~`5S}DJ0U^|=;#Q;_awvin7y^ zcm^Ja8&_V1I}*&;btsh>d1k-)G&?ii8Tq9SzflhA05_o&rlfG<+`)sRO4M(tB-c=f z_%W&G`LaDFj^uF-;8zJZb_m-~$)Oq*iD6J_#r=CupG;;iUmUYA4F;W+PG%yO{T@rt zB)mO4O0=7uN5Cz-cm=fqyJ)W#sD+k#Y(N|BR)O}=-YC!mwATwn_kN;wv6%_fnh0T@ z>qv5^;*??CPEofLumPW_NC~TW8NeP=150K2e_B=R6z;=ea|>(zpu~mThP&`R2N>xv zGuA9zYj1L|_2y{&8ot7#CWI>q&kwk=PGp@lGaq?Ok%(j-I_`{#xQLb})9ypeT_zH{ zFj*Y=0@Pa3)xVifw9Q4-nz~$S!%uD3^Y{75GyV>fSU#E}^n0wk&jQa60zTIXe`TzD zKj`yyzsDn;d}5Ro?!cf)d8p5BqRutmTtQX2cuhsNYm0bZQ;7quD~XiuGq%l#dske z`~Z9kPksQx1&@9JLp+#x@!-WXzPCG5wxxwOL?)SefA-Cr_ul;8?8KwmPJQcfG@*8n z*<`mYr8&VQjRnE2M*&;|6b*>%6MGDdt?{(1>`JLvu3C#rm1pH_sah;sl}y=szEq6Y z-PFSDTW8yFN=J?UO_quRW@ zfH1$vudb&%NU`_A`24Z{V_VHzzB;1eA#RBn3fD#Gb|-yVj~r63YB> zm&kXTe}o(+YGUp{*cn2N`^4O$^Q0Z?O{fQSnV7&07IANI!c({tqr1j8&yZYU97pZj zD^7i<`KGziQXiD3)qJ*)6W_bYO_De+p41&47o(K`M7qI;QiSzp!=+S?+M&?NNzemr z1;?&HR>TCnY__Dv%iTX$*reHpHlbsqpK4g2;6)7f4lE0ai2|3_tL*1dQKlJs0A&hZ zO~3o~)r*|t?~gLu|I}FnC`(BtqwI?m1Z9+61$u_Tz&OP;@bMhES5rwNP{l9~r#>A1 zrW1Tb^snMMy{gN?aj$c)28Rh#_G(({+3u$l1ZBJbUF~5i{gC1r`t2R@jWje-c9s98 W-0$|@licgSGhPiMz5kYT9*%!=lX-Fg literal 0 HcmV?d00001 diff --git a/tool/algorithm/transforml1a/build/temp.win-amd64-3.8/Release/build/SAR_geo/SAR_GEO.obj b/tool/algorithm/transforml1a/build/temp.win-amd64-3.8/Release/build/SAR_geo/SAR_GEO.obj new file mode 100644 index 0000000000000000000000000000000000000000..d22d27a579d79d48430618e9493d50449d324252 GIT binary patch literal 484497 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