From 727a1d8ab9a9d3de8f0a19d5f27913e1a13a3d37 Mon Sep 17 00:00:00 2001 From: Huayi Zhou Date: Fri, 23 Aug 2024 19:44:24 +0800 Subject: [PATCH] Add files via upload --- Sim3DR/Sim3DR.py | 29 + ...m3DR_Cython.cpython-38-x86_64-linux-gnu.so | Bin 0 -> 519728 bytes Sim3DR/__init__.py | 4 + Sim3DR/_init_paths.py | 14 + .../temp.linux-x86_64-3.8/lib/rasterize.o | Bin 0 -> 964448 bytes .../lib/rasterize_kernel.o | Bin 0 -> 225216 bytes Sim3DR/build_sim3dr.sh | 1 + Sim3DR/lib/rasterize.cpp | 7178 +++++++++++++++++ Sim3DR/lib/rasterize.h | 115 + Sim3DR/lib/rasterize.pyx | 134 + Sim3DR/lib/rasterize_kernel.cpp | 494 ++ Sim3DR/lighting.py | 79 + Sim3DR/readme.md | 11 + Sim3DR/setup.py | 19 + Sim3DR/tests/CMakeLists.txt | 12 + Sim3DR/tests/io.cpp | 89 + Sim3DR/tests/io.h | 20 + Sim3DR/tests/test.cpp | 172 + 18 files changed, 8371 insertions(+) create mode 100644 Sim3DR/Sim3DR.py create mode 100644 Sim3DR/Sim3DR_Cython.cpython-38-x86_64-linux-gnu.so create mode 100644 Sim3DR/__init__.py create mode 100644 Sim3DR/_init_paths.py create mode 100644 Sim3DR/build/temp.linux-x86_64-3.8/lib/rasterize.o create mode 100644 Sim3DR/build/temp.linux-x86_64-3.8/lib/rasterize_kernel.o create mode 100644 Sim3DR/build_sim3dr.sh create mode 100644 Sim3DR/lib/rasterize.cpp create mode 100644 Sim3DR/lib/rasterize.h create mode 100644 Sim3DR/lib/rasterize.pyx create mode 100644 Sim3DR/lib/rasterize_kernel.cpp create mode 100644 Sim3DR/lighting.py create mode 100644 Sim3DR/readme.md create mode 100644 Sim3DR/setup.py create mode 100644 Sim3DR/tests/CMakeLists.txt create mode 100644 Sim3DR/tests/io.cpp create mode 100644 Sim3DR/tests/io.h create mode 100644 Sim3DR/tests/test.cpp diff --git a/Sim3DR/Sim3DR.py b/Sim3DR/Sim3DR.py new file mode 100644 index 0000000..d734dad --- /dev/null +++ b/Sim3DR/Sim3DR.py @@ -0,0 +1,29 @@ +# coding: utf-8 + +from . import _init_paths +import numpy as np +import Sim3DR_Cython + + +def get_normal(vertices, triangles): + normal = np.zeros_like(vertices, dtype=np.float32) + Sim3DR_Cython.get_normal(normal, vertices, triangles, vertices.shape[0], triangles.shape[0]) + return normal + + +def rasterize(vertices, triangles, colors, bg=None, + height=None, width=None, channel=None, + reverse=False): + if bg is not None: + height, width, channel = bg.shape + else: + assert height is not None and width is not None and channel is not None + bg = np.zeros((height, width, channel), dtype=np.uint8) + + buffer = np.zeros((height, width), dtype=np.float32) - 1e8 + + if colors.dtype != np.float32: + colors = colors.astype(np.float32) + Sim3DR_Cython.rasterize(bg, vertices, triangles, colors, buffer, triangles.shape[0], height, width, channel, + reverse=reverse) + return bg diff --git a/Sim3DR/Sim3DR_Cython.cpython-38-x86_64-linux-gnu.so b/Sim3DR/Sim3DR_Cython.cpython-38-x86_64-linux-gnu.so new file mode 100644 index 0000000000000000000000000000000000000000..5892566f0677a9b38289ec21315e5553070ccd4f GIT binary patch literal 519728 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�^OnV#&AC$`sQ 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

D{!}C4>n=|Z&t>_G!c|Wxcq)s3 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 literal 0 HcmV?d00001 diff --git a/Sim3DR/build/temp.linux-x86_64-3.8/lib/rasterize_kernel.o b/Sim3DR/build/temp.linux-x86_64-3.8/lib/rasterize_kernel.o new file mode 100644 index 0000000000000000000000000000000000000000..f1dc6eb7d5c2291a4e5d130a75c219b2e15e561e GIT binary patch literal 225216 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�XihyZnp4j!=G3zy;H%7eezk9Dc7H45 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 +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef __cplusplus + #error "Cython files generated with the C++ option must be compiled with a C++ compiler." +#endif +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #else + #define CYTHON_INLINE inline + #endif +#endif +template +void __Pyx_call_destructor(T& x) { + x.~T(); +} +template +class __Pyx_FakeReference { + public: + __Pyx_FakeReference() : ptr(NULL) { } + __Pyx_FakeReference(const T& ref) : ptr(const_cast(&ref)) { } + T *operator->() { return ptr; } + T *operator&() { return ptr; } + operator T&() { return *ptr; } + template bool operator ==(U other) { return *ptr == other; } + template bool operator !=(U other) { return *ptr != other; } + private: + T *ptr; +}; + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__Sim3DR_Cython +#define __PYX_HAVE_API__Sim3DR_Cython +/* 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 "rasterize.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + +/* Header.proto */ +#if !defined(CYTHON_CCOMPLEX) + #if defined(__cplusplus) + #define CYTHON_CCOMPLEX 1 + #elif defined(_Complex_I) + #define CYTHON_CCOMPLEX 1 + #else + #define CYTHON_CCOMPLEX 0 + #endif +#endif +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #include + #else + #include + #endif +#endif +#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) + #undef _Complex_I + #define _Complex_I 1.0fj +#endif + + +static const char *__pyx_f[] = { + "lib/rasterize.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; + + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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 ---*/ + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* 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 }; + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* 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 + +/* 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 + +/* 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); + +/* 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 + +/* 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 + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* 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 '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; +static CYTHON_INLINE int __pyx_f_5numpy_import_array(void); /*proto*/ + +/* Module declarations from 'cython' */ + +/* Module declarations from 'libcpp' */ + +/* Module declarations from 'Sim3DR_Cython' */ +static __Pyx_TypeInfo __Pyx_TypeInfo_float = { "float", NULL, sizeof(float), { 0 }, 0, 'R', 0, 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_unsigned_char = { "unsigned char", NULL, sizeof(unsigned char), { 0 }, 0, IS_UNSIGNED(unsigned char) ? 'U' : 'I', IS_UNSIGNED(unsigned char), 0 }; +#define __Pyx_MODULE_NAME "Sim3DR_Cython" +extern int __pyx_module_is_main_Sim3DR_Cython; +int __pyx_module_is_main_Sim3DR_Cython = 0; + +/* Implementation of 'Sim3DR_Cython' */ +static PyObject *__pyx_builtin_ImportError; +static const char __pyx_k_c[] = "c"; +static const char __pyx_k_h[] = "h"; +static const char __pyx_k_w[] = "w"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_ntri[] = "ntri"; +static const char __pyx_k_nver[] = "nver"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_alpha[] = "alpha"; +static const char __pyx_k_image[] = "image"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_colors[] = "colors"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_reverse[] = "reverse"; +static const char __pyx_k_norm_flg[] = "norm_flg"; +static const char __pyx_k_vertices[] = "vertices"; +static const char __pyx_k_rasterize[] = "rasterize"; +static const char __pyx_k_triangles[] = "triangles"; +static const char __pyx_k_get_normal[] = "get_normal"; +static const char __pyx_k_tri_normal[] = "tri_normal"; +static const char __pyx_k_ver_normal[] = "ver_normal"; +static const char __pyx_k_ImportError[] = "ImportError"; +static const char __pyx_k_depth_buffer[] = "depth_buffer"; +static const char __pyx_k_Sim3DR_Cython[] = "Sim3DR_Cython"; +static const char __pyx_k_get_tri_normal[] = "get_tri_normal"; +static const char __pyx_k_get_ver_normal[] = "get_ver_normal"; +static const char __pyx_k_triangle_buffer[] = "triangle_buffer"; +static const char __pyx_k_lib_rasterize_pyx[] = "lib/rasterize.pyx"; +static const char __pyx_k_barycentric_weight[] = "barycentric_weight"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_rasterize_triangles[] = "rasterize_triangles"; +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_n_s_Sim3DR_Cython; +static PyObject *__pyx_n_s_alpha; +static PyObject *__pyx_n_s_barycentric_weight; +static PyObject *__pyx_n_s_c; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_colors; +static PyObject *__pyx_n_s_depth_buffer; +static PyObject *__pyx_n_s_get_normal; +static PyObject *__pyx_n_s_get_tri_normal; +static PyObject *__pyx_n_s_get_ver_normal; +static PyObject *__pyx_n_s_h; +static PyObject *__pyx_n_s_image; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_kp_s_lib_rasterize_pyx; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_norm_flg; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_ntri; +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_nver; +static PyObject *__pyx_n_s_rasterize; +static PyObject *__pyx_n_s_rasterize_triangles; +static PyObject *__pyx_n_s_reverse; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_tri_normal; +static PyObject *__pyx_n_s_triangle_buffer; +static PyObject *__pyx_n_s_triangles; +static PyObject *__pyx_n_s_ver_normal; +static PyObject *__pyx_n_s_vertices; +static PyObject *__pyx_n_s_w; +static PyObject *__pyx_pf_13Sim3DR_Cython_get_tri_normal(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_tri_normal, PyArrayObject *__pyx_v_vertices, PyArrayObject *__pyx_v_triangles, int __pyx_v_ntri, bool __pyx_v_norm_flg); /* proto */ +static PyObject *__pyx_pf_13Sim3DR_Cython_2get_ver_normal(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ver_normal, PyArrayObject *__pyx_v_tri_normal, PyArrayObject *__pyx_v_triangles, int __pyx_v_nver, int __pyx_v_ntri); /* proto */ +static PyObject *__pyx_pf_13Sim3DR_Cython_4get_normal(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ver_normal, PyArrayObject *__pyx_v_vertices, PyArrayObject *__pyx_v_triangles, int __pyx_v_nver, int __pyx_v_ntri); /* proto */ +static PyObject *__pyx_pf_13Sim3DR_Cython_6rasterize_triangles(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_vertices, PyArrayObject *__pyx_v_triangles, PyArrayObject *__pyx_v_depth_buffer, PyArrayObject *__pyx_v_triangle_buffer, PyArrayObject *__pyx_v_barycentric_weight, int __pyx_v_ntri, int __pyx_v_h, int __pyx_v_w); /* proto */ +static PyObject *__pyx_pf_13Sim3DR_Cython_8rasterize(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_image, PyArrayObject *__pyx_v_vertices, PyArrayObject *__pyx_v_triangles, PyArrayObject *__pyx_v_colors, PyArrayObject *__pyx_v_depth_buffer, int __pyx_v_ntri, int __pyx_v_h, int __pyx_v_w, int __pyx_v_c, float __pyx_v_alpha, bool __pyx_v_reverse); /* proto */ +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_tuple__9; +static PyObject *__pyx_tuple__11; +static PyObject *__pyx_codeobj__4; +static PyObject *__pyx_codeobj__6; +static PyObject *__pyx_codeobj__8; +static PyObject *__pyx_codeobj__10; +static PyObject *__pyx_codeobj__12; +/* Late includes */ + +/* "lib/rasterize.pyx":44 + * @cython.boundscheck(False) + * @cython.wraparound(False) + * def get_tri_normal(np.ndarray[float, ndim=2, mode="c"] tri_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_13Sim3DR_Cython_1get_tri_normal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_13Sim3DR_Cython_1get_tri_normal = {"get_tri_normal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_13Sim3DR_Cython_1get_tri_normal, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_13Sim3DR_Cython_1get_tri_normal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_tri_normal = 0; + PyArrayObject *__pyx_v_vertices = 0; + PyArrayObject *__pyx_v_triangles = 0; + int __pyx_v_ntri; + bool __pyx_v_norm_flg; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get_tri_normal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tri_normal,&__pyx_n_s_vertices,&__pyx_n_s_triangles,&__pyx_n_s_ntri,&__pyx_n_s_norm_flg,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_tri_normal)) != 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_vertices)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_tri_normal", 0, 4, 5, 1); __PYX_ERR(0, 44, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_triangles)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_tri_normal", 0, 4, 5, 2); __PYX_ERR(0, 44, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ntri)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_tri_normal", 0, 4, 5, 3); __PYX_ERR(0, 44, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_norm_flg); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_tri_normal") < 0)) __PYX_ERR(0, 44, __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_tri_normal = ((PyArrayObject *)values[0]); + __pyx_v_vertices = ((PyArrayObject *)values[1]); + __pyx_v_triangles = ((PyArrayObject *)values[2]); + __pyx_v_ntri = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_ntri == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 47, __pyx_L3_error) + if (values[4]) { + __pyx_v_norm_flg = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_norm_flg == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 47, __pyx_L3_error) + } else { + + /* "lib/rasterize.pyx":47 + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + * int ntri, bool norm_flg = False): # <<<<<<<<<<<<<< + * _get_tri_normal( np.PyArray_DATA(tri_normal), np.PyArray_DATA(vertices), + * np.PyArray_DATA(triangles), ntri, norm_flg) + */ + __pyx_v_norm_flg = ((bool)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("get_tri_normal", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 44, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("Sim3DR_Cython.get_tri_normal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tri_normal), __pyx_ptype_5numpy_ndarray, 0, "tri_normal", 0))) __PYX_ERR(0, 44, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vertices), __pyx_ptype_5numpy_ndarray, 0, "vertices", 0))) __PYX_ERR(0, 45, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_triangles), __pyx_ptype_5numpy_ndarray, 0, "triangles", 0))) __PYX_ERR(0, 46, __pyx_L1_error) + __pyx_r = __pyx_pf_13Sim3DR_Cython_get_tri_normal(__pyx_self, __pyx_v_tri_normal, __pyx_v_vertices, __pyx_v_triangles, __pyx_v_ntri, __pyx_v_norm_flg); + + /* "lib/rasterize.pyx":44 + * @cython.boundscheck(False) + * @cython.wraparound(False) + * def get_tri_normal(np.ndarray[float, ndim=2, mode="c"] tri_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_13Sim3DR_Cython_get_tri_normal(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_tri_normal, PyArrayObject *__pyx_v_vertices, PyArrayObject *__pyx_v_triangles, int __pyx_v_ntri, bool __pyx_v_norm_flg) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_tri_normal; + __Pyx_Buffer __pyx_pybuffer_tri_normal; + __Pyx_LocalBuf_ND __pyx_pybuffernd_triangles; + __Pyx_Buffer __pyx_pybuffer_triangles; + __Pyx_LocalBuf_ND __pyx_pybuffernd_vertices; + __Pyx_Buffer __pyx_pybuffer_vertices; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_tri_normal", 0); + __pyx_pybuffer_tri_normal.pybuffer.buf = NULL; + __pyx_pybuffer_tri_normal.refcount = 0; + __pyx_pybuffernd_tri_normal.data = NULL; + __pyx_pybuffernd_tri_normal.rcbuffer = &__pyx_pybuffer_tri_normal; + __pyx_pybuffer_vertices.pybuffer.buf = NULL; + __pyx_pybuffer_vertices.refcount = 0; + __pyx_pybuffernd_vertices.data = NULL; + __pyx_pybuffernd_vertices.rcbuffer = &__pyx_pybuffer_vertices; + __pyx_pybuffer_triangles.pybuffer.buf = NULL; + __pyx_pybuffer_triangles.refcount = 0; + __pyx_pybuffernd_triangles.data = NULL; + __pyx_pybuffernd_triangles.rcbuffer = &__pyx_pybuffer_triangles; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_tri_normal.rcbuffer->pybuffer, (PyObject*)__pyx_v_tri_normal, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error) + } + __pyx_pybuffernd_tri_normal.diminfo[0].strides = __pyx_pybuffernd_tri_normal.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_tri_normal.diminfo[0].shape = __pyx_pybuffernd_tri_normal.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_tri_normal.diminfo[1].strides = __pyx_pybuffernd_tri_normal.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_tri_normal.diminfo[1].shape = __pyx_pybuffernd_tri_normal.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertices, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error) + } + __pyx_pybuffernd_vertices.diminfo[0].strides = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertices.diminfo[0].shape = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertices.diminfo[1].strides = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertices.diminfo[1].shape = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer, (PyObject*)__pyx_v_triangles, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 44, __pyx_L1_error) + } + __pyx_pybuffernd_triangles.diminfo[0].strides = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_triangles.diminfo[0].shape = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_triangles.diminfo[1].strides = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_triangles.diminfo[1].shape = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.shape[1]; + + /* "lib/rasterize.pyx":48 + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + * int ntri, bool norm_flg = False): + * _get_tri_normal( np.PyArray_DATA(tri_normal), np.PyArray_DATA(vertices), # <<<<<<<<<<<<<< + * np.PyArray_DATA(triangles), ntri, norm_flg) + * + */ + _get_tri_normal(((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_tri_normal))), ((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_vertices))), ((int *)PyArray_DATA(((PyArrayObject *)__pyx_v_triangles))), __pyx_v_ntri, __pyx_v_norm_flg); + + /* "lib/rasterize.pyx":44 + * @cython.boundscheck(False) + * @cython.wraparound(False) + * def get_tri_normal(np.ndarray[float, ndim=2, mode="c"] tri_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + { 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_tri_normal.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("Sim3DR_Cython.get_tri_normal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_tri_normal.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "lib/rasterize.pyx":53 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def get_ver_normal(np.ndarray[float, ndim=2, mode = "c"] ver_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] tri_normal not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_13Sim3DR_Cython_3get_ver_normal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_13Sim3DR_Cython_3get_ver_normal = {"get_ver_normal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_13Sim3DR_Cython_3get_ver_normal, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_13Sim3DR_Cython_3get_ver_normal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_ver_normal = 0; + PyArrayObject *__pyx_v_tri_normal = 0; + PyArrayObject *__pyx_v_triangles = 0; + int __pyx_v_nver; + int __pyx_v_ntri; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get_ver_normal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ver_normal,&__pyx_n_s_tri_normal,&__pyx_n_s_triangles,&__pyx_n_s_nver,&__pyx_n_s_ntri,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_ver_normal)) != 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_tri_normal)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_ver_normal", 1, 5, 5, 1); __PYX_ERR(0, 53, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_triangles)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_ver_normal", 1, 5, 5, 2); __PYX_ERR(0, 53, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nver)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_ver_normal", 1, 5, 5, 3); __PYX_ERR(0, 53, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ntri)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_ver_normal", 1, 5, 5, 4); __PYX_ERR(0, 53, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_ver_normal") < 0)) __PYX_ERR(0, 53, __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_ver_normal = ((PyArrayObject *)values[0]); + __pyx_v_tri_normal = ((PyArrayObject *)values[1]); + __pyx_v_triangles = ((PyArrayObject *)values[2]); + __pyx_v_nver = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_nver == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L3_error) + __pyx_v_ntri = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_ntri == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 56, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("get_ver_normal", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 53, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("Sim3DR_Cython.get_ver_normal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ver_normal), __pyx_ptype_5numpy_ndarray, 0, "ver_normal", 0))) __PYX_ERR(0, 53, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tri_normal), __pyx_ptype_5numpy_ndarray, 0, "tri_normal", 0))) __PYX_ERR(0, 54, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_triangles), __pyx_ptype_5numpy_ndarray, 0, "triangles", 0))) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_r = __pyx_pf_13Sim3DR_Cython_2get_ver_normal(__pyx_self, __pyx_v_ver_normal, __pyx_v_tri_normal, __pyx_v_triangles, __pyx_v_nver, __pyx_v_ntri); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_13Sim3DR_Cython_2get_ver_normal(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ver_normal, PyArrayObject *__pyx_v_tri_normal, PyArrayObject *__pyx_v_triangles, int __pyx_v_nver, int __pyx_v_ntri) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_tri_normal; + __Pyx_Buffer __pyx_pybuffer_tri_normal; + __Pyx_LocalBuf_ND __pyx_pybuffernd_triangles; + __Pyx_Buffer __pyx_pybuffer_triangles; + __Pyx_LocalBuf_ND __pyx_pybuffernd_ver_normal; + __Pyx_Buffer __pyx_pybuffer_ver_normal; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_ver_normal", 0); + __pyx_pybuffer_ver_normal.pybuffer.buf = NULL; + __pyx_pybuffer_ver_normal.refcount = 0; + __pyx_pybuffernd_ver_normal.data = NULL; + __pyx_pybuffernd_ver_normal.rcbuffer = &__pyx_pybuffer_ver_normal; + __pyx_pybuffer_tri_normal.pybuffer.buf = NULL; + __pyx_pybuffer_tri_normal.refcount = 0; + __pyx_pybuffernd_tri_normal.data = NULL; + __pyx_pybuffernd_tri_normal.rcbuffer = &__pyx_pybuffer_tri_normal; + __pyx_pybuffer_triangles.pybuffer.buf = NULL; + __pyx_pybuffer_triangles.refcount = 0; + __pyx_pybuffernd_triangles.data = NULL; + __pyx_pybuffernd_triangles.rcbuffer = &__pyx_pybuffer_triangles; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ver_normal.rcbuffer->pybuffer, (PyObject*)__pyx_v_ver_normal, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 53, __pyx_L1_error) + } + __pyx_pybuffernd_ver_normal.diminfo[0].strides = __pyx_pybuffernd_ver_normal.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ver_normal.diminfo[0].shape = __pyx_pybuffernd_ver_normal.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ver_normal.diminfo[1].strides = __pyx_pybuffernd_ver_normal.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ver_normal.diminfo[1].shape = __pyx_pybuffernd_ver_normal.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_tri_normal.rcbuffer->pybuffer, (PyObject*)__pyx_v_tri_normal, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 53, __pyx_L1_error) + } + __pyx_pybuffernd_tri_normal.diminfo[0].strides = __pyx_pybuffernd_tri_normal.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_tri_normal.diminfo[0].shape = __pyx_pybuffernd_tri_normal.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_tri_normal.diminfo[1].strides = __pyx_pybuffernd_tri_normal.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_tri_normal.diminfo[1].shape = __pyx_pybuffernd_tri_normal.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer, (PyObject*)__pyx_v_triangles, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 53, __pyx_L1_error) + } + __pyx_pybuffernd_triangles.diminfo[0].strides = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_triangles.diminfo[0].shape = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_triangles.diminfo[1].strides = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_triangles.diminfo[1].shape = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.shape[1]; + + /* "lib/rasterize.pyx":57 + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + * int nver, int ntri): + * _get_ver_normal( # <<<<<<<<<<<<<< + * np.PyArray_DATA(ver_normal), np.PyArray_DATA(tri_normal), np.PyArray_DATA(triangles), + * nver, ntri) + */ + _get_ver_normal(((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_ver_normal))), ((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_tri_normal))), ((int *)PyArray_DATA(((PyArrayObject *)__pyx_v_triangles))), __pyx_v_nver, __pyx_v_ntri); + + /* "lib/rasterize.pyx":53 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def get_ver_normal(np.ndarray[float, ndim=2, mode = "c"] ver_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] tri_normal not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + { 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_tri_normal.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ver_normal.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("Sim3DR_Cython.get_ver_normal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_tri_normal.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ver_normal.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "lib/rasterize.pyx":63 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def get_normal(np.ndarray[float, ndim=2, mode = "c"] ver_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_13Sim3DR_Cython_5get_normal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_13Sim3DR_Cython_5get_normal = {"get_normal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_13Sim3DR_Cython_5get_normal, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_13Sim3DR_Cython_5get_normal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_ver_normal = 0; + PyArrayObject *__pyx_v_vertices = 0; + PyArrayObject *__pyx_v_triangles = 0; + int __pyx_v_nver; + int __pyx_v_ntri; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get_normal (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ver_normal,&__pyx_n_s_vertices,&__pyx_n_s_triangles,&__pyx_n_s_nver,&__pyx_n_s_ntri,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_ver_normal)) != 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_vertices)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_normal", 1, 5, 5, 1); __PYX_ERR(0, 63, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_triangles)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_normal", 1, 5, 5, 2); __PYX_ERR(0, 63, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nver)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_normal", 1, 5, 5, 3); __PYX_ERR(0, 63, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ntri)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("get_normal", 1, 5, 5, 4); __PYX_ERR(0, 63, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_normal") < 0)) __PYX_ERR(0, 63, __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_ver_normal = ((PyArrayObject *)values[0]); + __pyx_v_vertices = ((PyArrayObject *)values[1]); + __pyx_v_triangles = ((PyArrayObject *)values[2]); + __pyx_v_nver = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_nver == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L3_error) + __pyx_v_ntri = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_ntri == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("get_normal", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 63, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("Sim3DR_Cython.get_normal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ver_normal), __pyx_ptype_5numpy_ndarray, 0, "ver_normal", 0))) __PYX_ERR(0, 63, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vertices), __pyx_ptype_5numpy_ndarray, 0, "vertices", 0))) __PYX_ERR(0, 64, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_triangles), __pyx_ptype_5numpy_ndarray, 0, "triangles", 0))) __PYX_ERR(0, 65, __pyx_L1_error) + __pyx_r = __pyx_pf_13Sim3DR_Cython_4get_normal(__pyx_self, __pyx_v_ver_normal, __pyx_v_vertices, __pyx_v_triangles, __pyx_v_nver, __pyx_v_ntri); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_13Sim3DR_Cython_4get_normal(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ver_normal, PyArrayObject *__pyx_v_vertices, PyArrayObject *__pyx_v_triangles, int __pyx_v_nver, int __pyx_v_ntri) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_triangles; + __Pyx_Buffer __pyx_pybuffer_triangles; + __Pyx_LocalBuf_ND __pyx_pybuffernd_ver_normal; + __Pyx_Buffer __pyx_pybuffer_ver_normal; + __Pyx_LocalBuf_ND __pyx_pybuffernd_vertices; + __Pyx_Buffer __pyx_pybuffer_vertices; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_normal", 0); + __pyx_pybuffer_ver_normal.pybuffer.buf = NULL; + __pyx_pybuffer_ver_normal.refcount = 0; + __pyx_pybuffernd_ver_normal.data = NULL; + __pyx_pybuffernd_ver_normal.rcbuffer = &__pyx_pybuffer_ver_normal; + __pyx_pybuffer_vertices.pybuffer.buf = NULL; + __pyx_pybuffer_vertices.refcount = 0; + __pyx_pybuffernd_vertices.data = NULL; + __pyx_pybuffernd_vertices.rcbuffer = &__pyx_pybuffer_vertices; + __pyx_pybuffer_triangles.pybuffer.buf = NULL; + __pyx_pybuffer_triangles.refcount = 0; + __pyx_pybuffernd_triangles.data = NULL; + __pyx_pybuffernd_triangles.rcbuffer = &__pyx_pybuffer_triangles; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ver_normal.rcbuffer->pybuffer, (PyObject*)__pyx_v_ver_normal, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 63, __pyx_L1_error) + } + __pyx_pybuffernd_ver_normal.diminfo[0].strides = __pyx_pybuffernd_ver_normal.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ver_normal.diminfo[0].shape = __pyx_pybuffernd_ver_normal.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ver_normal.diminfo[1].strides = __pyx_pybuffernd_ver_normal.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ver_normal.diminfo[1].shape = __pyx_pybuffernd_ver_normal.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertices, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 63, __pyx_L1_error) + } + __pyx_pybuffernd_vertices.diminfo[0].strides = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertices.diminfo[0].shape = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertices.diminfo[1].strides = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertices.diminfo[1].shape = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer, (PyObject*)__pyx_v_triangles, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 63, __pyx_L1_error) + } + __pyx_pybuffernd_triangles.diminfo[0].strides = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_triangles.diminfo[0].shape = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_triangles.diminfo[1].strides = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_triangles.diminfo[1].shape = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.shape[1]; + + /* "lib/rasterize.pyx":67 + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + * int nver, int ntri): + * _get_normal( # <<<<<<<<<<<<<< + * np.PyArray_DATA(ver_normal), np.PyArray_DATA(vertices), np.PyArray_DATA(triangles), + * nver, ntri) + */ + _get_normal(((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_ver_normal))), ((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_vertices))), ((int *)PyArray_DATA(((PyArrayObject *)__pyx_v_triangles))), __pyx_v_nver, __pyx_v_ntri); + + /* "lib/rasterize.pyx":63 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def get_normal(np.ndarray[float, ndim=2, mode = "c"] ver_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + { 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_triangles.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ver_normal.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("Sim3DR_Cython.get_normal", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ver_normal.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "lib/rasterize.pyx":74 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def rasterize_triangles( # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_13Sim3DR_Cython_7rasterize_triangles(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_13Sim3DR_Cython_7rasterize_triangles = {"rasterize_triangles", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_13Sim3DR_Cython_7rasterize_triangles, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_13Sim3DR_Cython_7rasterize_triangles(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_vertices = 0; + PyArrayObject *__pyx_v_triangles = 0; + PyArrayObject *__pyx_v_depth_buffer = 0; + PyArrayObject *__pyx_v_triangle_buffer = 0; + PyArrayObject *__pyx_v_barycentric_weight = 0; + int __pyx_v_ntri; + int __pyx_v_h; + int __pyx_v_w; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("rasterize_triangles (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vertices,&__pyx_n_s_triangles,&__pyx_n_s_depth_buffer,&__pyx_n_s_triangle_buffer,&__pyx_n_s_barycentric_weight,&__pyx_n_s_ntri,&__pyx_n_s_h,&__pyx_n_s_w,0}; + PyObject* values[8] = {0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_vertices)) != 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_triangles)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize_triangles", 1, 8, 8, 1); __PYX_ERR(0, 74, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_depth_buffer)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize_triangles", 1, 8, 8, 2); __PYX_ERR(0, 74, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_triangle_buffer)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize_triangles", 1, 8, 8, 3); __PYX_ERR(0, 74, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_barycentric_weight)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize_triangles", 1, 8, 8, 4); __PYX_ERR(0, 74, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ntri)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize_triangles", 1, 8, 8, 5); __PYX_ERR(0, 74, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_h)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize_triangles", 1, 8, 8, 6); __PYX_ERR(0, 74, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize_triangles", 1, 8, 8, 7); __PYX_ERR(0, 74, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rasterize_triangles") < 0)) __PYX_ERR(0, 74, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 8) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + } + __pyx_v_vertices = ((PyArrayObject *)values[0]); + __pyx_v_triangles = ((PyArrayObject *)values[1]); + __pyx_v_depth_buffer = ((PyArrayObject *)values[2]); + __pyx_v_triangle_buffer = ((PyArrayObject *)values[3]); + __pyx_v_barycentric_weight = ((PyArrayObject *)values[4]); + __pyx_v_ntri = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_ntri == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L3_error) + __pyx_v_h = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_h == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L3_error) + __pyx_v_w = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_w == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 80, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("rasterize_triangles", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 74, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("Sim3DR_Cython.rasterize_triangles", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vertices), __pyx_ptype_5numpy_ndarray, 0, "vertices", 0))) __PYX_ERR(0, 75, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_triangles), __pyx_ptype_5numpy_ndarray, 0, "triangles", 0))) __PYX_ERR(0, 76, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_depth_buffer), __pyx_ptype_5numpy_ndarray, 0, "depth_buffer", 0))) __PYX_ERR(0, 77, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_triangle_buffer), __pyx_ptype_5numpy_ndarray, 0, "triangle_buffer", 0))) __PYX_ERR(0, 78, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_barycentric_weight), __pyx_ptype_5numpy_ndarray, 0, "barycentric_weight", 0))) __PYX_ERR(0, 79, __pyx_L1_error) + __pyx_r = __pyx_pf_13Sim3DR_Cython_6rasterize_triangles(__pyx_self, __pyx_v_vertices, __pyx_v_triangles, __pyx_v_depth_buffer, __pyx_v_triangle_buffer, __pyx_v_barycentric_weight, __pyx_v_ntri, __pyx_v_h, __pyx_v_w); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_13Sim3DR_Cython_6rasterize_triangles(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_vertices, PyArrayObject *__pyx_v_triangles, PyArrayObject *__pyx_v_depth_buffer, PyArrayObject *__pyx_v_triangle_buffer, PyArrayObject *__pyx_v_barycentric_weight, int __pyx_v_ntri, int __pyx_v_h, int __pyx_v_w) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_barycentric_weight; + __Pyx_Buffer __pyx_pybuffer_barycentric_weight; + __Pyx_LocalBuf_ND __pyx_pybuffernd_depth_buffer; + __Pyx_Buffer __pyx_pybuffer_depth_buffer; + __Pyx_LocalBuf_ND __pyx_pybuffernd_triangle_buffer; + __Pyx_Buffer __pyx_pybuffer_triangle_buffer; + __Pyx_LocalBuf_ND __pyx_pybuffernd_triangles; + __Pyx_Buffer __pyx_pybuffer_triangles; + __Pyx_LocalBuf_ND __pyx_pybuffernd_vertices; + __Pyx_Buffer __pyx_pybuffer_vertices; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("rasterize_triangles", 0); + __pyx_pybuffer_vertices.pybuffer.buf = NULL; + __pyx_pybuffer_vertices.refcount = 0; + __pyx_pybuffernd_vertices.data = NULL; + __pyx_pybuffernd_vertices.rcbuffer = &__pyx_pybuffer_vertices; + __pyx_pybuffer_triangles.pybuffer.buf = NULL; + __pyx_pybuffer_triangles.refcount = 0; + __pyx_pybuffernd_triangles.data = NULL; + __pyx_pybuffernd_triangles.rcbuffer = &__pyx_pybuffer_triangles; + __pyx_pybuffer_depth_buffer.pybuffer.buf = NULL; + __pyx_pybuffer_depth_buffer.refcount = 0; + __pyx_pybuffernd_depth_buffer.data = NULL; + __pyx_pybuffernd_depth_buffer.rcbuffer = &__pyx_pybuffer_depth_buffer; + __pyx_pybuffer_triangle_buffer.pybuffer.buf = NULL; + __pyx_pybuffer_triangle_buffer.refcount = 0; + __pyx_pybuffernd_triangle_buffer.data = NULL; + __pyx_pybuffernd_triangle_buffer.rcbuffer = &__pyx_pybuffer_triangle_buffer; + __pyx_pybuffer_barycentric_weight.pybuffer.buf = NULL; + __pyx_pybuffer_barycentric_weight.refcount = 0; + __pyx_pybuffernd_barycentric_weight.data = NULL; + __pyx_pybuffernd_barycentric_weight.rcbuffer = &__pyx_pybuffer_barycentric_weight; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertices, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 74, __pyx_L1_error) + } + __pyx_pybuffernd_vertices.diminfo[0].strides = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertices.diminfo[0].shape = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertices.diminfo[1].strides = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertices.diminfo[1].shape = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer, (PyObject*)__pyx_v_triangles, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 74, __pyx_L1_error) + } + __pyx_pybuffernd_triangles.diminfo[0].strides = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_triangles.diminfo[0].shape = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_triangles.diminfo[1].strides = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_triangles.diminfo[1].shape = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer, (PyObject*)__pyx_v_depth_buffer, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 74, __pyx_L1_error) + } + __pyx_pybuffernd_depth_buffer.diminfo[0].strides = __pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_depth_buffer.diminfo[0].shape = __pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_depth_buffer.diminfo[1].strides = __pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_depth_buffer.diminfo[1].shape = __pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_triangle_buffer.rcbuffer->pybuffer, (PyObject*)__pyx_v_triangle_buffer, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 74, __pyx_L1_error) + } + __pyx_pybuffernd_triangle_buffer.diminfo[0].strides = __pyx_pybuffernd_triangle_buffer.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_triangle_buffer.diminfo[0].shape = __pyx_pybuffernd_triangle_buffer.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_triangle_buffer.diminfo[1].strides = __pyx_pybuffernd_triangle_buffer.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_triangle_buffer.diminfo[1].shape = __pyx_pybuffernd_triangle_buffer.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_barycentric_weight.rcbuffer->pybuffer, (PyObject*)__pyx_v_barycentric_weight, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 74, __pyx_L1_error) + } + __pyx_pybuffernd_barycentric_weight.diminfo[0].strides = __pyx_pybuffernd_barycentric_weight.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_barycentric_weight.diminfo[0].shape = __pyx_pybuffernd_barycentric_weight.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_barycentric_weight.diminfo[1].strides = __pyx_pybuffernd_barycentric_weight.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_barycentric_weight.diminfo[1].shape = __pyx_pybuffernd_barycentric_weight.rcbuffer->pybuffer.shape[1]; + + /* "lib/rasterize.pyx":82 + * int ntri, int h, int w + * ): + * _rasterize_triangles( # <<<<<<<<<<<<<< + * np.PyArray_DATA(vertices), np.PyArray_DATA(triangles), + * np.PyArray_DATA(depth_buffer), np.PyArray_DATA(triangle_buffer), + */ + _rasterize_triangles(((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_vertices))), ((int *)PyArray_DATA(((PyArrayObject *)__pyx_v_triangles))), ((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_depth_buffer))), ((int *)PyArray_DATA(((PyArrayObject *)__pyx_v_triangle_buffer))), ((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_barycentric_weight))), __pyx_v_ntri, __pyx_v_h, __pyx_v_w); + + /* "lib/rasterize.pyx":74 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def rasterize_triangles( # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + { 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_barycentric_weight.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_triangle_buffer.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("Sim3DR_Cython.rasterize_triangles", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_barycentric_weight.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_triangle_buffer.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "lib/rasterize.pyx":90 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def rasterize(np.ndarray[unsigned char, ndim=3, mode = "c"] image not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_13Sim3DR_Cython_9rasterize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_13Sim3DR_Cython_9rasterize = {"rasterize", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_13Sim3DR_Cython_9rasterize, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_13Sim3DR_Cython_9rasterize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_image = 0; + PyArrayObject *__pyx_v_vertices = 0; + PyArrayObject *__pyx_v_triangles = 0; + PyArrayObject *__pyx_v_colors = 0; + PyArrayObject *__pyx_v_depth_buffer = 0; + int __pyx_v_ntri; + int __pyx_v_h; + int __pyx_v_w; + int __pyx_v_c; + float __pyx_v_alpha; + bool __pyx_v_reverse; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("rasterize (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_image,&__pyx_n_s_vertices,&__pyx_n_s_triangles,&__pyx_n_s_colors,&__pyx_n_s_depth_buffer,&__pyx_n_s_ntri,&__pyx_n_s_h,&__pyx_n_s_w,&__pyx_n_s_c,&__pyx_n_s_alpha,&__pyx_n_s_reverse,0}; + PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_image)) != 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_vertices)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize", 0, 9, 11, 1); __PYX_ERR(0, 90, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_triangles)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize", 0, 9, 11, 2); __PYX_ERR(0, 90, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_colors)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize", 0, 9, 11, 3); __PYX_ERR(0, 90, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_depth_buffer)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize", 0, 9, 11, 4); __PYX_ERR(0, 90, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ntri)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize", 0, 9, 11, 5); __PYX_ERR(0, 90, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_h)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize", 0, 9, 11, 6); __PYX_ERR(0, 90, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize", 0, 9, 11, 7); __PYX_ERR(0, 90, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("rasterize", 0, 9, 11, 8); __PYX_ERR(0, 90, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_alpha); + if (value) { values[9] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 10: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reverse); + if (value) { values[10] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rasterize") < 0)) __PYX_ERR(0, 90, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); + CYTHON_FALLTHROUGH; + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_image = ((PyArrayObject *)values[0]); + __pyx_v_vertices = ((PyArrayObject *)values[1]); + __pyx_v_triangles = ((PyArrayObject *)values[2]); + __pyx_v_colors = ((PyArrayObject *)values[3]); + __pyx_v_depth_buffer = ((PyArrayObject *)values[4]); + __pyx_v_ntri = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_ntri == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L3_error) + __pyx_v_h = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_h == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L3_error) + __pyx_v_w = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_w == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L3_error) + __pyx_v_c = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_c == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L3_error) + if (values[9]) { + __pyx_v_alpha = __pyx_PyFloat_AsFloat(values[9]); if (unlikely((__pyx_v_alpha == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L3_error) + } else { + __pyx_v_alpha = ((float)1.0); + } + if (values[10]) { + __pyx_v_reverse = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_reverse == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L3_error) + } else { + + /* "lib/rasterize.pyx":95 + * np.ndarray[float, ndim=2, mode = "c"] colors not None, + * np.ndarray[float, ndim=2, mode = "c"] depth_buffer not None, + * int ntri, int h, int w, int c, float alpha = 1, bool reverse = False # <<<<<<<<<<<<<< + * ): + * _rasterize( + */ + __pyx_v_reverse = ((bool)0); + } + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("rasterize", 0, 9, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 90, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("Sim3DR_Cython.rasterize", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_image), __pyx_ptype_5numpy_ndarray, 0, "image", 0))) __PYX_ERR(0, 90, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vertices), __pyx_ptype_5numpy_ndarray, 0, "vertices", 0))) __PYX_ERR(0, 91, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_triangles), __pyx_ptype_5numpy_ndarray, 0, "triangles", 0))) __PYX_ERR(0, 92, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_colors), __pyx_ptype_5numpy_ndarray, 0, "colors", 0))) __PYX_ERR(0, 93, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_depth_buffer), __pyx_ptype_5numpy_ndarray, 0, "depth_buffer", 0))) __PYX_ERR(0, 94, __pyx_L1_error) + __pyx_r = __pyx_pf_13Sim3DR_Cython_8rasterize(__pyx_self, __pyx_v_image, __pyx_v_vertices, __pyx_v_triangles, __pyx_v_colors, __pyx_v_depth_buffer, __pyx_v_ntri, __pyx_v_h, __pyx_v_w, __pyx_v_c, __pyx_v_alpha, __pyx_v_reverse); + + /* "lib/rasterize.pyx":90 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def rasterize(np.ndarray[unsigned char, ndim=3, mode = "c"] image not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_13Sim3DR_Cython_8rasterize(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_image, PyArrayObject *__pyx_v_vertices, PyArrayObject *__pyx_v_triangles, PyArrayObject *__pyx_v_colors, PyArrayObject *__pyx_v_depth_buffer, int __pyx_v_ntri, int __pyx_v_h, int __pyx_v_w, int __pyx_v_c, float __pyx_v_alpha, bool __pyx_v_reverse) { + __Pyx_LocalBuf_ND __pyx_pybuffernd_colors; + __Pyx_Buffer __pyx_pybuffer_colors; + __Pyx_LocalBuf_ND __pyx_pybuffernd_depth_buffer; + __Pyx_Buffer __pyx_pybuffer_depth_buffer; + __Pyx_LocalBuf_ND __pyx_pybuffernd_image; + __Pyx_Buffer __pyx_pybuffer_image; + __Pyx_LocalBuf_ND __pyx_pybuffernd_triangles; + __Pyx_Buffer __pyx_pybuffer_triangles; + __Pyx_LocalBuf_ND __pyx_pybuffernd_vertices; + __Pyx_Buffer __pyx_pybuffer_vertices; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("rasterize", 0); + __pyx_pybuffer_image.pybuffer.buf = NULL; + __pyx_pybuffer_image.refcount = 0; + __pyx_pybuffernd_image.data = NULL; + __pyx_pybuffernd_image.rcbuffer = &__pyx_pybuffer_image; + __pyx_pybuffer_vertices.pybuffer.buf = NULL; + __pyx_pybuffer_vertices.refcount = 0; + __pyx_pybuffernd_vertices.data = NULL; + __pyx_pybuffernd_vertices.rcbuffer = &__pyx_pybuffer_vertices; + __pyx_pybuffer_triangles.pybuffer.buf = NULL; + __pyx_pybuffer_triangles.refcount = 0; + __pyx_pybuffernd_triangles.data = NULL; + __pyx_pybuffernd_triangles.rcbuffer = &__pyx_pybuffer_triangles; + __pyx_pybuffer_colors.pybuffer.buf = NULL; + __pyx_pybuffer_colors.refcount = 0; + __pyx_pybuffernd_colors.data = NULL; + __pyx_pybuffernd_colors.rcbuffer = &__pyx_pybuffer_colors; + __pyx_pybuffer_depth_buffer.pybuffer.buf = NULL; + __pyx_pybuffer_depth_buffer.refcount = 0; + __pyx_pybuffernd_depth_buffer.data = NULL; + __pyx_pybuffernd_depth_buffer.rcbuffer = &__pyx_pybuffer_depth_buffer; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_image.rcbuffer->pybuffer, (PyObject*)__pyx_v_image, &__Pyx_TypeInfo_unsigned_char, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 90, __pyx_L1_error) + } + __pyx_pybuffernd_image.diminfo[0].strides = __pyx_pybuffernd_image.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_image.diminfo[0].shape = __pyx_pybuffernd_image.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_image.diminfo[1].strides = __pyx_pybuffernd_image.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_image.diminfo[1].shape = __pyx_pybuffernd_image.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_image.diminfo[2].strides = __pyx_pybuffernd_image.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_image.diminfo[2].shape = __pyx_pybuffernd_image.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer, (PyObject*)__pyx_v_vertices, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 90, __pyx_L1_error) + } + __pyx_pybuffernd_vertices.diminfo[0].strides = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vertices.diminfo[0].shape = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vertices.diminfo[1].strides = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vertices.diminfo[1].shape = __pyx_pybuffernd_vertices.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer, (PyObject*)__pyx_v_triangles, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 90, __pyx_L1_error) + } + __pyx_pybuffernd_triangles.diminfo[0].strides = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_triangles.diminfo[0].shape = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_triangles.diminfo[1].strides = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_triangles.diminfo[1].shape = __pyx_pybuffernd_triangles.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_colors.rcbuffer->pybuffer, (PyObject*)__pyx_v_colors, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 90, __pyx_L1_error) + } + __pyx_pybuffernd_colors.diminfo[0].strides = __pyx_pybuffernd_colors.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_colors.diminfo[0].shape = __pyx_pybuffernd_colors.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_colors.diminfo[1].strides = __pyx_pybuffernd_colors.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_colors.diminfo[1].shape = __pyx_pybuffernd_colors.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer, (PyObject*)__pyx_v_depth_buffer, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 90, __pyx_L1_error) + } + __pyx_pybuffernd_depth_buffer.diminfo[0].strides = __pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_depth_buffer.diminfo[0].shape = __pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_depth_buffer.diminfo[1].strides = __pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_depth_buffer.diminfo[1].shape = __pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer.shape[1]; + + /* "lib/rasterize.pyx":97 + * int ntri, int h, int w, int c, float alpha = 1, bool reverse = False + * ): + * _rasterize( # <<<<<<<<<<<<<< + * np.PyArray_DATA(image), np.PyArray_DATA(vertices), + * np.PyArray_DATA(triangles), + */ + _rasterize(((unsigned char *)PyArray_DATA(((PyArrayObject *)__pyx_v_image))), ((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_vertices))), ((int *)PyArray_DATA(((PyArrayObject *)__pyx_v_triangles))), ((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_colors))), ((float *)PyArray_DATA(((PyArrayObject *)__pyx_v_depth_buffer))), __pyx_v_ntri, __pyx_v_h, __pyx_v_w, __pyx_v_c, __pyx_v_alpha, __pyx_v_reverse); + + /* "lib/rasterize.pyx":90 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def rasterize(np.ndarray[unsigned char, ndim=3, mode = "c"] image not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + { 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_colors.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_image.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("Sim3DR_Cython.rasterize", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_colors.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_depth_buffer.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_image.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_triangles.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vertices.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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) { + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/site-packages/numpy/__init__.pxd":751 + * + * cdef inline tuple PyDataType_SHAPE(dtype d): + * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< + * return d.subarray.shape + * else: + */ + } + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + } + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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)); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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(); +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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) { + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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 + */ + } + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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:*/ { + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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) + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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:; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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_, 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:; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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:; + } + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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:*/ { + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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) + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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:; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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__2, 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:; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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:; + } + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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:*/ { + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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) + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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:; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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__2, 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:; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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:; + } + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; +} + +/* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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[] = { + {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_Sim3DR_Cython(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_Sim3DR_Cython}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "Sim3DR_Cython", + 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_n_s_Sim3DR_Cython, __pyx_k_Sim3DR_Cython, sizeof(__pyx_k_Sim3DR_Cython), 0, 0, 1, 1}, + {&__pyx_n_s_alpha, __pyx_k_alpha, sizeof(__pyx_k_alpha), 0, 0, 1, 1}, + {&__pyx_n_s_barycentric_weight, __pyx_k_barycentric_weight, sizeof(__pyx_k_barycentric_weight), 0, 0, 1, 1}, + {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_colors, __pyx_k_colors, sizeof(__pyx_k_colors), 0, 0, 1, 1}, + {&__pyx_n_s_depth_buffer, __pyx_k_depth_buffer, sizeof(__pyx_k_depth_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_get_normal, __pyx_k_get_normal, sizeof(__pyx_k_get_normal), 0, 0, 1, 1}, + {&__pyx_n_s_get_tri_normal, __pyx_k_get_tri_normal, sizeof(__pyx_k_get_tri_normal), 0, 0, 1, 1}, + {&__pyx_n_s_get_ver_normal, __pyx_k_get_ver_normal, sizeof(__pyx_k_get_ver_normal), 0, 0, 1, 1}, + {&__pyx_n_s_h, __pyx_k_h, sizeof(__pyx_k_h), 0, 0, 1, 1}, + {&__pyx_n_s_image, __pyx_k_image, sizeof(__pyx_k_image), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_kp_s_lib_rasterize_pyx, __pyx_k_lib_rasterize_pyx, sizeof(__pyx_k_lib_rasterize_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_norm_flg, __pyx_k_norm_flg, sizeof(__pyx_k_norm_flg), 0, 0, 1, 1}, + {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, + {&__pyx_n_s_ntri, __pyx_k_ntri, sizeof(__pyx_k_ntri), 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_nver, __pyx_k_nver, sizeof(__pyx_k_nver), 0, 0, 1, 1}, + {&__pyx_n_s_rasterize, __pyx_k_rasterize, sizeof(__pyx_k_rasterize), 0, 0, 1, 1}, + {&__pyx_n_s_rasterize_triangles, __pyx_k_rasterize_triangles, sizeof(__pyx_k_rasterize_triangles), 0, 0, 1, 1}, + {&__pyx_n_s_reverse, __pyx_k_reverse, sizeof(__pyx_k_reverse), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_tri_normal, __pyx_k_tri_normal, sizeof(__pyx_k_tri_normal), 0, 0, 1, 1}, + {&__pyx_n_s_triangle_buffer, __pyx_k_triangle_buffer, sizeof(__pyx_k_triangle_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_triangles, __pyx_k_triangles, sizeof(__pyx_k_triangles), 0, 0, 1, 1}, + {&__pyx_n_s_ver_normal, __pyx_k_ver_normal, sizeof(__pyx_k_ver_normal), 0, 0, 1, 1}, + {&__pyx_n_s_vertices, __pyx_k_vertices, sizeof(__pyx_k_vertices), 0, 0, 1, 1}, + {&__pyx_n_s_w, __pyx_k_w, sizeof(__pyx_k_w), 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); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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_ = PyTuple_Pack(1, __pyx_kp_s_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 947, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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__2 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 953, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "lib/rasterize.pyx":44 + * @cython.boundscheck(False) + * @cython.wraparound(False) + * def get_tri_normal(np.ndarray[float, ndim=2, mode="c"] tri_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + __pyx_tuple__3 = PyTuple_Pack(5, __pyx_n_s_tri_normal, __pyx_n_s_vertices, __pyx_n_s_triangles, __pyx_n_s_ntri, __pyx_n_s_norm_flg); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 44, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 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_lib_rasterize_pyx, __pyx_n_s_get_tri_normal, 44, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(0, 44, __pyx_L1_error) + + /* "lib/rasterize.pyx":53 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def get_ver_normal(np.ndarray[float, ndim=2, mode = "c"] ver_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] tri_normal not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + __pyx_tuple__5 = PyTuple_Pack(5, __pyx_n_s_ver_normal, __pyx_n_s_tri_normal, __pyx_n_s_triangles, __pyx_n_s_nver, __pyx_n_s_ntri); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 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_lib_rasterize_pyx, __pyx_n_s_get_ver_normal, 53, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) __PYX_ERR(0, 53, __pyx_L1_error) + + /* "lib/rasterize.pyx":63 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def get_normal(np.ndarray[float, ndim=2, mode = "c"] ver_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + __pyx_tuple__7 = PyTuple_Pack(5, __pyx_n_s_ver_normal, __pyx_n_s_vertices, __pyx_n_s_triangles, __pyx_n_s_nver, __pyx_n_s_ntri); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_lib_rasterize_pyx, __pyx_n_s_get_normal, 63, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) __PYX_ERR(0, 63, __pyx_L1_error) + + /* "lib/rasterize.pyx":74 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def rasterize_triangles( # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + __pyx_tuple__9 = PyTuple_Pack(8, __pyx_n_s_vertices, __pyx_n_s_triangles, __pyx_n_s_depth_buffer, __pyx_n_s_triangle_buffer, __pyx_n_s_barycentric_weight, __pyx_n_s_ntri, __pyx_n_s_h, __pyx_n_s_w); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + __pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(8, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__9, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_lib_rasterize_pyx, __pyx_n_s_rasterize_triangles, 74, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) __PYX_ERR(0, 74, __pyx_L1_error) + + /* "lib/rasterize.pyx":90 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def rasterize(np.ndarray[unsigned char, ndim=3, mode = "c"] image not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + __pyx_tuple__11 = PyTuple_Pack(11, __pyx_n_s_image, __pyx_n_s_vertices, __pyx_n_s_triangles, __pyx_n_s_colors, __pyx_n_s_depth_buffer, __pyx_n_s_ntri, __pyx_n_s_h, __pyx_n_s_w, __pyx_n_s_c, __pyx_n_s_alpha, __pyx_n_s_reverse); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(11, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_lib_rasterize_pyx, __pyx_n_s_rasterize, 90, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 90, __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); + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + 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 initSim3DR_Cython(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initSim3DR_Cython(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_Sim3DR_Cython(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_Sim3DR_Cython(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_Sim3DR_Cython(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + 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 'Sim3DR_Cython' 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_Sim3DR_Cython(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("Sim3DR_Cython", __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_Sim3DR_Cython) { + 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, "Sim3DR_Cython")) { + if (unlikely(PyDict_SetItemString(modules, "Sim3DR_Cython", __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 + + /* "lib/rasterize.pyx":1 + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as np + * # from libcpp.string cimport string + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 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_np, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "lib/rasterize.pyx":10 + * + * # use the Numpy-C-API from Cython + * np.import_array() # <<<<<<<<<<<<<< + * + * # cdefine the signature of our c function + */ + __pyx_t_2 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 10, __pyx_L1_error) + + /* "lib/rasterize.pyx":44 + * @cython.boundscheck(False) + * @cython.wraparound(False) + * def get_tri_normal(np.ndarray[float, ndim=2, mode="c"] tri_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_13Sim3DR_Cython_1get_tri_normal, NULL, __pyx_n_s_Sim3DR_Cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_tri_normal, __pyx_t_1) < 0) __PYX_ERR(0, 44, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "lib/rasterize.pyx":53 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def get_ver_normal(np.ndarray[float, ndim=2, mode = "c"] ver_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] tri_normal not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_13Sim3DR_Cython_3get_ver_normal, NULL, __pyx_n_s_Sim3DR_Cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_ver_normal, __pyx_t_1) < 0) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "lib/rasterize.pyx":63 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def get_normal(np.ndarray[float, ndim=2, mode = "c"] ver_normal not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_13Sim3DR_Cython_5get_normal, NULL, __pyx_n_s_Sim3DR_Cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_normal, __pyx_t_1) < 0) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "lib/rasterize.pyx":74 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def rasterize_triangles( # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_13Sim3DR_Cython_7rasterize_triangles, NULL, __pyx_n_s_Sim3DR_Cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rasterize_triangles, __pyx_t_1) < 0) __PYX_ERR(0, 74, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "lib/rasterize.pyx":90 + * @cython.boundscheck(False) # turn off bounds-checking for entire function + * @cython.wraparound(False) # turn off negative index wrapping for entire function + * def rasterize(np.ndarray[unsigned char, ndim=3, mode = "c"] image not None, # <<<<<<<<<<<<<< + * np.ndarray[float, ndim=2, mode = "c"] vertices not None, + * np.ndarray[int, ndim=2, mode="c"] triangles not None, + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_13Sim3DR_Cython_9rasterize, NULL, __pyx_n_s_Sim3DR_Cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_rasterize, __pyx_t_1) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "lib/rasterize.pyx":1 + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as np + * # from libcpp.string cimport string + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "../../../../../home/zhouhuayi/anaconda3/lib/python3.8/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); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init Sim3DR_Cython", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init Sim3DR_Cython"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); + return 0; +} + +/* 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; +} + +/* PyErrFetchRestore */ + #if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* PyObjectGetAttrStr */ + #if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* 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; +} + +/* 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; +} + +/* PyObjectCall */ + #if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* 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; +} + +/* 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 + +/* 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;\ + } + +/* 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 + +/* 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; +} + +/* 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/Sim3DR/lib/rasterize.h b/Sim3DR/lib/rasterize.h new file mode 100644 index 0000000..de7a19c --- /dev/null +++ b/Sim3DR/lib/rasterize.h @@ -0,0 +1,115 @@ +#ifndef MESH_CORE_HPP_ +#define MESH_CORE_HPP_ + +#include +#include +#include +#include +#include +#include + +using namespace std; + +class Point3D { +public: + float x; + float y; + float z; + +public: + Point3D() : x(0.f), y(0.f), z(0.f) {} + Point3D(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {} + + void initialize(float x_, float y_, float z_){ + this->x = x_; this->y = y_; this->z = z_; + } + + Point3D cross(Point3D &p){ + Point3D c; + c.x = this->y * p.z - this->z * p.y; + c.y = this->z * p.x - this->x * p.z; + c.z = this->x * p.y - this->y * p.x; + return c; + } + + float dot(Point3D &p) { + return this->x * p.x + this->y * p.y + this->z * p.z; + } + + Point3D operator-(const Point3D &p) { + Point3D np; + np.x = this->x - p.x; + np.y = this->y - p.y; + np.z = this->z - p.z; + return np; + } + +}; + +class Point { +public: + float x; + float y; + +public: + Point() : x(0.f), y(0.f) {} + Point(float x_, float y_) : x(x_), y(y_) {} + float dot(Point p) { + return this->x * p.x + this->y * p.y; + } + + Point operator-(const Point &p) { + Point np; + np.x = this->x - p.x; + np.y = this->y - p.y; + return np; + } + + Point operator+(const Point &p) { + Point np; + np.x = this->x + p.x; + np.y = this->y + p.y; + return np; + } + + Point operator*(float s) { + Point np; + np.x = s * this->x; + np.y = s * this->y; + return np; + } +}; + + +bool is_point_in_tri(Point p, Point p0, Point p1, Point p2); + +void get_point_weight(float *weight, Point p, Point p0, Point p1, Point p2); + +void _get_tri_normal(float *tri_normal, float *vertices, int *triangles, int ntri, bool norm_flg); + +void _get_ver_normal(float *ver_normal, float *tri_normal, int *triangles, int nver, int ntri); + +void _get_normal(float *ver_normal, float *vertices, int *triangles, int nver, int ntri); + +void _rasterize_triangles( + float *vertices, int *triangles, float *depth_buffer, int *triangle_buffer, float *barycentric_weight, + int ntri, int h, int w); + +void _rasterize( + unsigned char *image, float *vertices, int *triangles, float *colors, + float *depth_buffer, int ntri, int h, int w, int c, float alpha, bool reverse); + +void _render_texture_core( + float *image, float *vertices, int *triangles, + float *texture, float *tex_coords, int *tex_triangles, + float *depth_buffer, + int nver, int tex_nver, int ntri, + int h, int w, int c, + int tex_h, int tex_w, int tex_c, + int mapping_type); + +void _write_obj_with_colors_texture(string filename, string mtl_name, + float *vertices, int *triangles, float *colors, float *uv_coords, + int nver, int ntri, int ntexver); + +#endif \ No newline at end of file diff --git a/Sim3DR/lib/rasterize.pyx b/Sim3DR/lib/rasterize.pyx new file mode 100644 index 0000000..3fb88bb --- /dev/null +++ b/Sim3DR/lib/rasterize.pyx @@ -0,0 +1,134 @@ +import numpy as np +cimport numpy as np +# from libcpp.string cimport string +cimport cython +from libcpp cimport bool + +# from cpython import bool + +# use the Numpy-C-API from Cython +np.import_array() + +# cdefine the signature of our c function +cdef extern from "rasterize.h": + void _rasterize_triangles( + float*vertices, int*triangles, float*depth_buffer, int*triangle_buffer, float*barycentric_weight, + int ntri, int h, int w + ) + + void _rasterize( + unsigned char*image, float*vertices, int*triangles, float*colors, float*depth_buffer, + int ntri, int h, int w, int c, float alpha, bool reverse + ) + + # void _render_texture_core( + # float* image, float* vertices, int* triangles, + # float* texture, float* tex_coords, int* tex_triangles, + # float* depth_buffer, + # int nver, int tex_nver, int ntri, + # int h, int w, int c, + # int tex_h, int tex_w, int tex_c, + # int mapping_type) + + void _get_tri_normal(float *tri_normal, float *vertices, int *triangles, int nver, bool norm_flg) + void _get_ver_normal(float *ver_normal, float*tri_normal, int*triangles, int nver, int ntri) + void _get_normal(float *ver_normal, float *vertices, int *triangles, int nver, int ntri) + + + # void _write_obj_with_colors_texture(string filename, string mtl_name, + # float* vertices, int* triangles, float* colors, float* uv_coords, + # int nver, int ntri, int ntexver) + +@cython.boundscheck(False) +@cython.wraparound(False) +def get_tri_normal(np.ndarray[float, ndim=2, mode="c"] tri_normal not None, + np.ndarray[float, ndim=2, mode = "c"] vertices not None, + np.ndarray[int, ndim=2, mode="c"] triangles not None, + int ntri, bool norm_flg = False): + _get_tri_normal( np.PyArray_DATA(tri_normal), np.PyArray_DATA(vertices), + np.PyArray_DATA(triangles), ntri, norm_flg) + +@cython.boundscheck(False) # turn off bounds-checking for entire function +@cython.wraparound(False) # turn off negative index wrapping for entire function +def get_ver_normal(np.ndarray[float, ndim=2, mode = "c"] ver_normal not None, + np.ndarray[float, ndim=2, mode = "c"] tri_normal not None, + np.ndarray[int, ndim=2, mode="c"] triangles not None, + int nver, int ntri): + _get_ver_normal( + np.PyArray_DATA(ver_normal), np.PyArray_DATA(tri_normal), np.PyArray_DATA(triangles), + nver, ntri) + +@cython.boundscheck(False) # turn off bounds-checking for entire function +@cython.wraparound(False) # turn off negative index wrapping for entire function +def get_normal(np.ndarray[float, ndim=2, mode = "c"] ver_normal not None, + np.ndarray[float, ndim=2, mode = "c"] vertices not None, + np.ndarray[int, ndim=2, mode="c"] triangles not None, + int nver, int ntri): + _get_normal( + np.PyArray_DATA(ver_normal), np.PyArray_DATA(vertices), np.PyArray_DATA(triangles), + nver, ntri) + + +@cython.boundscheck(False) # turn off bounds-checking for entire function +@cython.wraparound(False) # turn off negative index wrapping for entire function +def rasterize_triangles( + np.ndarray[float, ndim=2, mode = "c"] vertices not None, + np.ndarray[int, ndim=2, mode="c"] triangles not None, + np.ndarray[float, ndim=2, mode = "c"] depth_buffer not None, + np.ndarray[int, ndim=2, mode = "c"] triangle_buffer not None, + np.ndarray[float, ndim=2, mode = "c"] barycentric_weight not None, + int ntri, int h, int w +): + _rasterize_triangles( + np.PyArray_DATA(vertices), np.PyArray_DATA(triangles), + np.PyArray_DATA(depth_buffer), np.PyArray_DATA(triangle_buffer), + np.PyArray_DATA(barycentric_weight), + ntri, h, w) + +@cython.boundscheck(False) # turn off bounds-checking for entire function +@cython.wraparound(False) # turn off negative index wrapping for entire function +def rasterize(np.ndarray[unsigned char, ndim=3, mode = "c"] image not None, + np.ndarray[float, ndim=2, mode = "c"] vertices not None, + np.ndarray[int, ndim=2, mode="c"] triangles not None, + np.ndarray[float, ndim=2, mode = "c"] colors not None, + np.ndarray[float, ndim=2, mode = "c"] depth_buffer not None, + int ntri, int h, int w, int c, float alpha = 1, bool reverse = False + ): + _rasterize( + np.PyArray_DATA(image), np.PyArray_DATA(vertices), + np.PyArray_DATA(triangles), + np.PyArray_DATA(colors), + np.PyArray_DATA(depth_buffer), + ntri, h, w, c, alpha, reverse) + +# def render_texture_core(np.ndarray[float, ndim=3, mode = "c"] image not None, +# np.ndarray[float, ndim=2, mode = "c"] vertices not None, +# np.ndarray[int, ndim=2, mode="c"] triangles not None, +# np.ndarray[float, ndim=3, mode = "c"] texture not None, +# np.ndarray[float, ndim=2, mode = "c"] tex_coords not None, +# np.ndarray[int, ndim=2, mode="c"] tex_triangles not None, +# np.ndarray[float, ndim=2, mode = "c"] depth_buffer not None, +# int nver, int tex_nver, int ntri, +# int h, int w, int c, +# int tex_h, int tex_w, int tex_c, +# int mapping_type +# ): +# _render_texture_core( +# np.PyArray_DATA(image), np.PyArray_DATA(vertices), np.PyArray_DATA(triangles), +# np.PyArray_DATA(texture), np.PyArray_DATA(tex_coords), np.PyArray_DATA(tex_triangles), +# np.PyArray_DATA(depth_buffer), +# nver, tex_nver, ntri, +# h, w, c, +# tex_h, tex_w, tex_c, +# mapping_type) +# +# def write_obj_with_colors_texture_core(string filename, string mtl_name, +# np.ndarray[float, ndim=2, mode = "c"] vertices not None, +# np.ndarray[int, ndim=2, mode="c"] triangles not None, +# np.ndarray[float, ndim=2, mode = "c"] colors not None, +# np.ndarray[float, ndim=2, mode = "c"] uv_coords not None, +# int nver, int ntri, int ntexver +# ): +# _write_obj_with_colors_texture(filename, mtl_name, +# np.PyArray_DATA(vertices), np.PyArray_DATA(triangles), np.PyArray_DATA(colors), np.PyArray_DATA(uv_coords), +# nver, ntri, ntexver) diff --git a/Sim3DR/lib/rasterize_kernel.cpp b/Sim3DR/lib/rasterize_kernel.cpp new file mode 100644 index 0000000..034a5ed --- /dev/null +++ b/Sim3DR/lib/rasterize_kernel.cpp @@ -0,0 +1,494 @@ +/* + Author: Yao Feng + Modified by Jianzhu Guo + + functions that can not be optimazed by vertorization in python. + 1. rasterization.(need process each triangle) + 2. normal of each vertex.(use one-ring, need process each vertex) + 3. write obj(seems that it can be verctorized? anyway, writing it in c++ is simple, so also add function here. --> however, why writting in c++ is still slow?) + + + +*/ + +#include "rasterize.h" + + +/* Judge whether the Point is in the triangle +Method: + http://blackpawn.com/texts/pointinpoly/ +Args: + Point: [x, y] + tri_points: three vertices(2d points) of a triangle. 2 coords x 3 vertices +Returns: + bool: true for in triangle +*/ +bool is_point_in_tri(Point p, Point p0, Point p1, Point p2) { + // vectors + Point v0, v1, v2; + v0 = p2 - p0; + v1 = p1 - p0; + v2 = p - p0; + + // dot products + float dot00 = v0.dot(v0); //v0.x * v0.x + v0.y * v0.y //np.dot(v0.T, v0) + float dot01 = v0.dot(v1); //v0.x * v1.x + v0.y * v1.y //np.dot(v0.T, v1) + float dot02 = v0.dot(v2); //v0.x * v2.x + v0.y * v2.y //np.dot(v0.T, v2) + float dot11 = v1.dot(v1); //v1.x * v1.x + v1.y * v1.y //np.dot(v1.T, v1) + float dot12 = v1.dot(v2); //v1.x * v2.x + v1.y * v2.y//np.dot(v1.T, v2) + + // barycentric coordinates + float inverDeno; + if (dot00 * dot11 - dot01 * dot01 == 0) + inverDeno = 0; + else + inverDeno = 1 / (dot00 * dot11 - dot01 * dot01); + + float u = (dot11 * dot02 - dot01 * dot12) * inverDeno; + float v = (dot00 * dot12 - dot01 * dot02) * inverDeno; + + // check if Point in triangle + return (u >= 0) && (v >= 0) && (u + v < 1); +} + +void get_point_weight(float *weight, Point p, Point p0, Point p1, Point p2) { + // vectors + Point v0, v1, v2; + v0 = p2 - p0; + v1 = p1 - p0; + v2 = p - p0; + + // dot products + float dot00 = v0.dot(v0); //v0.x * v0.x + v0.y * v0.y //np.dot(v0.T, v0) + float dot01 = v0.dot(v1); //v0.x * v1.x + v0.y * v1.y //np.dot(v0.T, v1) + float dot02 = v0.dot(v2); //v0.x * v2.x + v0.y * v2.y //np.dot(v0.T, v2) + float dot11 = v1.dot(v1); //v1.x * v1.x + v1.y * v1.y //np.dot(v1.T, v1) + float dot12 = v1.dot(v2); //v1.x * v2.x + v1.y * v2.y//np.dot(v1.T, v2) + + // barycentric coordinates + float inverDeno; + if (dot00 * dot11 - dot01 * dot01 == 0) + inverDeno = 0; + else + inverDeno = 1 / (dot00 * dot11 - dot01 * dot01); + + float u = (dot11 * dot02 - dot01 * dot12) * inverDeno; + float v = (dot00 * dot12 - dot01 * dot02) * inverDeno; + + // weight + weight[0] = 1 - u - v; + weight[1] = v; + weight[2] = u; +} + +/* + * Get normals of triangles. + */ +void _get_tri_normal(float *tri_normal, float *vertices, int *triangles, int ntri, bool norm_flg) { + int tri_p0_ind, tri_p1_ind, tri_p2_ind; + float v1x, v1y, v1z, v2x, v2y, v2z; + + for (int i = 0; i < ntri; i++) { + tri_p0_ind = triangles[3 * i]; + tri_p1_ind = triangles[3 * i + 1]; + tri_p2_ind = triangles[3 * i + 2]; + + // counter clockwise order + v1x = vertices[3 * tri_p1_ind] - vertices[3 * tri_p0_ind]; + v1y = vertices[3 * tri_p1_ind + 1] - vertices[3 * tri_p0_ind + 1]; + v1z = vertices[3 * tri_p1_ind + 2] - vertices[3 * tri_p0_ind + 2]; + + v2x = vertices[3 * tri_p2_ind] - vertices[3 * tri_p0_ind]; + v2y = vertices[3 * tri_p2_ind + 1] - vertices[3 * tri_p0_ind + 1]; + v2z = vertices[3 * tri_p2_ind + 2] - vertices[3 * tri_p0_ind + 2]; + + if (norm_flg) { + float c1 = v1y * v2z - v1z * v2y; + float c2 = v1z * v2x - v1x * v2z; + float c3 = v1x * v2y - v1y * v2x; + float det = sqrt(c1 * c1 + c2 * c2 + c3 * c3); + if (det <= 0) det = 1e-6; + tri_normal[3 * i] = c1 / det; + tri_normal[3 * i + 1] = c2 / det; + tri_normal[3 * i + 2] = c3 / det; + } else { + tri_normal[3 * i] = v1y * v2z - v1z * v2y; + tri_normal[3 * i + 1] = v1z * v2x - v1x * v2z; + tri_normal[3 * i + 2] = v1x * v2y - v1y * v2x; + } + } +} + +/* + * Get normal vector of vertices using triangle normals + */ +void _get_ver_normal(float *ver_normal, float *tri_normal, int *triangles, int nver, int ntri) { + int tri_p0_ind, tri_p1_ind, tri_p2_ind; + + for (int i = 0; i < ntri; i++) { + tri_p0_ind = triangles[3 * i]; + tri_p1_ind = triangles[3 * i + 1]; + tri_p2_ind = triangles[3 * i + 2]; + + for (int j = 0; j < 3; j++) { + ver_normal[3 * tri_p0_ind + j] += tri_normal[3 * i + j]; + ver_normal[3 * tri_p1_ind + j] += tri_normal[3 * i + j]; + ver_normal[3 * tri_p2_ind + j] += tri_normal[3 * i + j]; + } + } + + // normalizing + float nx, ny, nz, det; + for (int i = 0; i < nver; ++i) { + nx = ver_normal[3 * i]; + ny = ver_normal[3 * i + 1]; + nz = ver_normal[3 * i + 2]; + + det = sqrt(nx * nx + ny * ny + nz * nz); + if (det <= 0) det = 1e-6; + ver_normal[3 * i] = nx / det; + ver_normal[3 * i + 1] = ny / det; + ver_normal[3 * i + 2] = nz / det; + } +} + +/* + * Directly get normal of vertices, which can be regraded as a combination of _get_tri_normal and _get_ver_normal + */ +void _get_normal(float *ver_normal, float *vertices, int *triangles, int nver, int ntri) { + int tri_p0_ind, tri_p1_ind, tri_p2_ind; + float v1x, v1y, v1z, v2x, v2y, v2z; + + // get tri_normal +// float tri_normal[3 * ntri]; + float* tri_normal; + tri_normal = new float [3 * ntri]; + for (int i = 0; i < ntri; i++) { + tri_p0_ind = triangles[3 * i]; + tri_p1_ind = triangles[3 * i + 1]; + tri_p2_ind = triangles[3 * i + 2]; + + // counter clockwise order + v1x = vertices[3 * tri_p1_ind] - vertices[3 * tri_p0_ind]; + v1y = vertices[3 * tri_p1_ind + 1] - vertices[3 * tri_p0_ind + 1]; + v1z = vertices[3 * tri_p1_ind + 2] - vertices[3 * tri_p0_ind + 2]; + + v2x = vertices[3 * tri_p2_ind] - vertices[3 * tri_p0_ind]; + v2y = vertices[3 * tri_p2_ind + 1] - vertices[3 * tri_p0_ind + 1]; + v2z = vertices[3 * tri_p2_ind + 2] - vertices[3 * tri_p0_ind + 2]; + + + tri_normal[3 * i] = v1y * v2z - v1z * v2y; + tri_normal[3 * i + 1] = v1z * v2x - v1x * v2z; + tri_normal[3 * i + 2] = v1x * v2y - v1y * v2x; + + } + + // get ver_normal + for (int i = 0; i < ntri; i++) { + tri_p0_ind = triangles[3 * i]; + tri_p1_ind = triangles[3 * i + 1]; + tri_p2_ind = triangles[3 * i + 2]; + + for (int j = 0; j < 3; j++) { + ver_normal[3 * tri_p0_ind + j] += tri_normal[3 * i + j]; + ver_normal[3 * tri_p1_ind + j] += tri_normal[3 * i + j]; + ver_normal[3 * tri_p2_ind + j] += tri_normal[3 * i + j]; + } + } + + // normalizing + float nx, ny, nz, det; + for (int i = 0; i < nver; ++i) { + nx = ver_normal[3 * i]; + ny = ver_normal[3 * i + 1]; + nz = ver_normal[3 * i + 2]; + + det = sqrt(nx * nx + ny * ny + nz * nz); +// if (det <= 0) det = 1e-6; + ver_normal[3 * i] = nx / det; + ver_normal[3 * i + 1] = ny / det; + ver_normal[3 * i + 2] = nz / det; + } + + delete[] tri_normal; +} + +// rasterization by Z-Buffer with optimization +// Complexity: < ntri * h * w * c +void _rasterize( + unsigned char *image, float *vertices, int *triangles, float *colors, float *depth_buffer, + int ntri, int h, int w, int c, float alpha, bool reverse) { + int x, y, k; + int tri_p0_ind, tri_p1_ind, tri_p2_ind; + Point p0, p1, p2, p; + int x_min, x_max, y_min, y_max; + float p_depth, p0_depth, p1_depth, p2_depth; + float p_color, p0_color, p1_color, p2_color; + float weight[3]; + + for (int i = 0; i < ntri; i++) { + tri_p0_ind = triangles[3 * i]; + tri_p1_ind = triangles[3 * i + 1]; + tri_p2_ind = triangles[3 * i + 2]; + + p0.x = vertices[3 * tri_p0_ind]; + p0.y = vertices[3 * tri_p0_ind + 1]; + p0_depth = vertices[3 * tri_p0_ind + 2]; + p1.x = vertices[3 * tri_p1_ind]; + p1.y = vertices[3 * tri_p1_ind + 1]; + p1_depth = vertices[3 * tri_p1_ind + 2]; + p2.x = vertices[3 * tri_p2_ind]; + p2.y = vertices[3 * tri_p2_ind + 1]; + p2_depth = vertices[3 * tri_p2_ind + 2]; + + x_min = max((int) floor(min(p0.x, min(p1.x, p2.x))), 0); + x_max = min((int) ceil(max(p0.x, max(p1.x, p2.x))), w - 1); + + y_min = max((int) floor(min(p0.y, min(p1.y, p2.y))), 0); + y_max = min((int) ceil(max(p0.y, max(p1.y, p2.y))), h - 1); + + if (x_max < x_min || y_max < y_min) { + continue; + } + + for (y = y_min; y <= y_max; y++) { + for (x = x_min; x <= x_max; x++) { + p.x = x; + p.y = y; + if (is_point_in_tri(p, p0, p1, p2)) { + get_point_weight(weight, p, p0, p1, p2); + p_depth = weight[0] * p0_depth + weight[1] * p1_depth + weight[2] * p2_depth; + + if ((p_depth > depth_buffer[y * w + x])) { + for (k = 0; k < c; k++) { + p0_color = colors[c * tri_p0_ind + k]; + p1_color = colors[c * tri_p1_ind + k]; + p2_color = colors[c * tri_p2_ind + k]; + + p_color = weight[0] * p0_color + weight[1] * p1_color + weight[2] * p2_color; + if (reverse) { + image[(h - 1 - y) * w * c + x * c + k] = (unsigned char) ( + (1 - alpha) * image[(h - 1 - y) * w * c + x * c + k] + alpha * 255 * p_color); +// image[(h - 1 - y) * w * c + x * c + k] = (unsigned char) (255 * p_color); + } else { + image[y * w * c + x * c + k] = (unsigned char) ( + (1 - alpha) * image[y * w * c + x * c + k] + alpha * 255 * p_color); +// image[y * w * c + x * c + k] = (unsigned char) (255 * p_color); + } + } + + depth_buffer[y * w + x] = p_depth; + } + } + } + } + } +} + + +void _rasterize_triangles( + float *vertices, int *triangles, float *depth_buffer, int *triangle_buffer, float *barycentric_weight, + int ntri, int h, int w) { + int i; + int x, y, k; + int tri_p0_ind, tri_p1_ind, tri_p2_ind; + Point p0, p1, p2, p; + int x_min, x_max, y_min, y_max; + float p_depth, p0_depth, p1_depth, p2_depth; + float weight[3]; + + for (i = 0; i < ntri; i++) { + tri_p0_ind = triangles[3 * i]; + tri_p1_ind = triangles[3 * i + 1]; + tri_p2_ind = triangles[3 * i + 2]; + + p0.x = vertices[3 * tri_p0_ind]; + p0.y = vertices[3 * tri_p0_ind + 1]; + p0_depth = vertices[3 * tri_p0_ind + 2]; + p1.x = vertices[3 * tri_p1_ind]; + p1.y = vertices[3 * tri_p1_ind + 1]; + p1_depth = vertices[3 * tri_p1_ind + 2]; + p2.x = vertices[3 * tri_p2_ind]; + p2.y = vertices[3 * tri_p2_ind + 1]; + p2_depth = vertices[3 * tri_p2_ind + 2]; + + x_min = max((int) ceil(min(p0.x, min(p1.x, p2.x))), 0); + x_max = min((int) floor(max(p0.x, max(p1.x, p2.x))), w - 1); + + y_min = max((int) ceil(min(p0.y, min(p1.y, p2.y))), 0); + y_max = min((int) floor(max(p0.y, max(p1.y, p2.y))), h - 1); + + if (x_max < x_min || y_max < y_min) { + continue; + } + + for (y = y_min; y <= y_max; y++) //h + { + for (x = x_min; x <= x_max; x++) //w + { + p.x = x; + p.y = y; +// if (p.x < 2 || p.x > w - 3 || p.y < 2 || p.y > h - 3 || is_point_in_tri(p, p0, p1, p2)) { + if (is_point_in_tri(p, p0, p1, p2)) { + get_point_weight(weight, p, p0, p1, p2); + p_depth = weight[0] * p0_depth + weight[1] * p1_depth + weight[2] * p2_depth; + + if ((p_depth > depth_buffer[y * w + x])) { + depth_buffer[y * w + x] = p_depth; + triangle_buffer[y * w + x] = i; + for (k = 0; k < 3; k++) { + barycentric_weight[y * w * 3 + x * 3 + k] = weight[k]; + } + } + } + } + } + } +} + + +// Depth-Buffer 算法 +// https://blog.csdn.net/Jurbo/article/details/75007260 +void _render_texture_core( + float *image, float *vertices, int *triangles, + float *texture, float *tex_coords, int *tex_triangles, + float *depth_buffer, + int nver, int tex_nver, int ntri, + int h, int w, int c, + int tex_h, int tex_w, int tex_c, + int mapping_type) { + int i; + int x, y, k; + int tri_p0_ind, tri_p1_ind, tri_p2_ind; + int tex_tri_p0_ind, tex_tri_p1_ind, tex_tri_p2_ind; + Point p0, p1, p2, p; + Point tex_p0, tex_p1, tex_p2, tex_p; + int x_min, x_max, y_min, y_max; + float weight[3]; + float p_depth, p0_depth, p1_depth, p2_depth; + float xd, yd; + float ul, ur, dl, dr; + for (i = 0; i < ntri; i++) { + // mesh + tri_p0_ind = triangles[3 * i]; + tri_p1_ind = triangles[3 * i + 1]; + tri_p2_ind = triangles[3 * i + 2]; + + p0.x = vertices[3 * tri_p0_ind]; + p0.y = vertices[3 * tri_p0_ind + 1]; + p0_depth = vertices[3 * tri_p0_ind + 2]; + p1.x = vertices[3 * tri_p1_ind]; + p1.y = vertices[3 * tri_p1_ind + 1]; + p1_depth = vertices[3 * tri_p1_ind + 2]; + p2.x = vertices[3 * tri_p2_ind]; + p2.y = vertices[3 * tri_p2_ind + 1]; + p2_depth = vertices[3 * tri_p2_ind + 2]; + + // texture + tex_tri_p0_ind = tex_triangles[3 * i]; + tex_tri_p1_ind = tex_triangles[3 * i + 1]; + tex_tri_p2_ind = tex_triangles[3 * i + 2]; + + tex_p0.x = tex_coords[3 * tex_tri_p0_ind]; + tex_p0.y = tex_coords[3 * tri_p0_ind + 1]; + tex_p1.x = tex_coords[3 * tex_tri_p1_ind]; + tex_p1.y = tex_coords[3 * tri_p1_ind + 1]; + tex_p2.x = tex_coords[3 * tex_tri_p2_ind]; + tex_p2.y = tex_coords[3 * tri_p2_ind + 1]; + + + x_min = max((int) ceil(min(p0.x, min(p1.x, p2.x))), 0); + x_max = min((int) floor(max(p0.x, max(p1.x, p2.x))), w - 1); + + y_min = max((int) ceil(min(p0.y, min(p1.y, p2.y))), 0); + y_max = min((int) floor(max(p0.y, max(p1.y, p2.y))), h - 1); + + + if (x_max < x_min || y_max < y_min) { + continue; + } + + for (y = y_min; y <= y_max; y++) //h + { + for (x = x_min; x <= x_max; x++) //w + { + p.x = x; + p.y = y; + if (p.x < 2 || p.x > w - 3 || p.y < 2 || p.y > h - 3 || is_point_in_tri(p, p0, p1, p2)) { + get_point_weight(weight, p, p0, p1, p2); + p_depth = weight[0] * p0_depth + weight[1] * p1_depth + weight[2] * p2_depth; + + if ((p_depth > depth_buffer[y * w + x])) { + // -- color from texture + // cal weight in mesh tri + get_point_weight(weight, p, p0, p1, p2); + // cal coord in texture + tex_p = tex_p0 * weight[0] + tex_p1 * weight[1] + tex_p2 * weight[2]; + tex_p.x = max(min(tex_p.x, float(tex_w - 1)), float(0)); + tex_p.y = max(min(tex_p.y, float(tex_h - 1)), float(0)); + + yd = tex_p.y - floor(tex_p.y); + xd = tex_p.x - floor(tex_p.x); + for (k = 0; k < c; k++) { + if (mapping_type == 0)// nearest + { + image[y * w * c + x * c + k] = texture[int(round(tex_p.y)) * tex_w * tex_c + + int(round(tex_p.x)) * tex_c + k]; + } else//bilinear interp + { + ul = texture[(int) floor(tex_p.y) * tex_w * tex_c + (int) floor(tex_p.x) * tex_c + k]; + ur = texture[(int) floor(tex_p.y) * tex_w * tex_c + (int) ceil(tex_p.x) * tex_c + k]; + dl = texture[(int) ceil(tex_p.y) * tex_w * tex_c + (int) floor(tex_p.x) * tex_c + k]; + dr = texture[(int) ceil(tex_p.y) * tex_w * tex_c + (int) ceil(tex_p.x) * tex_c + k]; + + image[y * w * c + x * c + k] = + ul * (1 - xd) * (1 - yd) + ur * xd * (1 - yd) + dl * (1 - xd) * yd + + dr * xd * yd; + } + + } + + depth_buffer[y * w + x] = p_depth; + } + } + } + } + } +} + + +// ------------------------------------------------- write +// obj write +// Ref: https://github.com/patrikhuber/eos/blob/master/include/eos/core/Mesh.hpp +void _write_obj_with_colors_texture(string filename, string mtl_name, + float *vertices, int *triangles, float *colors, float *uv_coords, + int nver, int ntri, int ntexver) { + int i; + + ofstream obj_file(filename); + + // first line of the obj file: the mtl name + obj_file << "mtllib " << mtl_name << endl; + + // write vertices + for (i = 0; i < nver; ++i) { + obj_file << "v " << vertices[3 * i] << " " << vertices[3 * i + 1] << " " << vertices[3 * i + 2] << colors[3 * i] + << " " << colors[3 * i + 1] << " " << colors[3 * i + 2] << endl; + } + + // write uv coordinates + for (i = 0; i < ntexver; ++i) { + //obj_file << "vt " << uv_coords[2*i] << " " << (1 - uv_coords[2*i + 1]) << endl; + obj_file << "vt " << uv_coords[2 * i] << " " << uv_coords[2 * i + 1] << endl; + } + + obj_file << "usemtl FaceTexture" << endl; + // write triangles + for (i = 0; i < ntri; ++i) { + // obj_file << "f " << triangles[3*i] << "/" << triangles[3*i] << " " << triangles[3*i + 1] << "/" << triangles[3*i + 1] << " " << triangles[3*i + 2] << "/" << triangles[3*i + 2] << endl; + obj_file << "f " << triangles[3 * i + 2] << "/" << triangles[3 * i + 2] << " " << triangles[3 * i + 1] << "/" + << triangles[3 * i + 1] << " " << triangles[3 * i] << "/" << triangles[3 * i] << endl; + } + +} \ No newline at end of file diff --git a/Sim3DR/lighting.py b/Sim3DR/lighting.py new file mode 100644 index 0000000..0f4a352 --- /dev/null +++ b/Sim3DR/lighting.py @@ -0,0 +1,79 @@ +# coding: utf-8 + +import numpy as np +from .Sim3DR import get_normal, rasterize + +_norm = lambda arr: arr / np.sqrt(np.sum(arr ** 2, axis=1))[:, None] + + +def norm_vertices(vertices): + vertices -= vertices.min(0)[None, :] + vertices /= vertices.max() + vertices *= 2 + vertices -= vertices.max(0)[None, :] / 2 + return vertices + + +def convert_type(obj): + if isinstance(obj, tuple) or isinstance(obj, list): + return np.array(obj, dtype=np.float32)[None, :] + return obj + + +class RenderPipeline(object): + def __init__(self, **kwargs): + self.intensity_ambient = convert_type(kwargs.get('intensity_ambient', 0.3)) + self.intensity_directional = convert_type(kwargs.get('intensity_directional', 0.6)) + self.intensity_specular = convert_type(kwargs.get('intensity_specular', 0.1)) + self.specular_exp = kwargs.get('specular_exp', 5) + self.color_ambient = convert_type(kwargs.get('color_ambient', (1, 1, 1))) + self.color_directional = convert_type(kwargs.get('color_directional', (1, 1, 1))) + self.light_pos = convert_type(kwargs.get('light_pos', (0, 0, 5))) + self.view_pos = convert_type(kwargs.get('view_pos', (0, 0, 5))) + + def update_light_pos(self, light_pos): + self.light_pos = convert_type(light_pos) + + def __call__(self, vertices, triangles, bg, texture=None): + normal = get_normal(vertices, triangles) + + # 2. lighting + light = np.zeros_like(vertices, dtype=np.float32) + # ambient component + if self.intensity_ambient > 0: + light += self.intensity_ambient * self.color_ambient + + vertices_n = norm_vertices(vertices.copy()) + if self.intensity_directional > 0: + # diffuse component + direction = _norm(self.light_pos - vertices_n) + cos = np.sum(normal * direction, axis=1)[:, None] + # cos = np.clip(cos, 0, 1) + # todo: check below + light += self.intensity_directional * (self.color_directional * np.clip(cos, 0, 1)) + + # specular component + if self.intensity_specular > 0: + v2v = _norm(self.view_pos - vertices_n) + reflection = 2 * cos * normal - direction + spe = np.sum((v2v * reflection) ** self.specular_exp, axis=1)[:, None] + spe = np.where(cos != 0, np.clip(spe, 0, 1), np.zeros_like(spe)) + light += self.intensity_specular * self.color_directional * np.clip(spe, 0, 1) + light = np.clip(light, 0, 1) + + # 2. rasterization, [0, 1] + if texture is None: + render_img = rasterize(vertices, triangles, light, bg=bg) + return render_img + else: + texture *= light + render_img = rasterize(vertices, triangles, texture, bg=bg) + return render_img + + +def main(): + pass + + +if __name__ == '__main__': + main() diff --git a/Sim3DR/readme.md b/Sim3DR/readme.md new file mode 100644 index 0000000..11c3024 --- /dev/null +++ b/Sim3DR/readme.md @@ -0,0 +1,11 @@ +## Forked from https://github.com/cleardusk/3DDFA_V2/tree/master/Sim3DR + +## Sim3DR +This is a simple 3D render, written by c++ and cython. + +### Build Sim3DR + +```shell script +python3 setup.py build_ext --inplace +``` + diff --git a/Sim3DR/setup.py b/Sim3DR/setup.py new file mode 100644 index 0000000..ae1614f --- /dev/null +++ b/Sim3DR/setup.py @@ -0,0 +1,19 @@ +''' +python setup.py build_ext -i +to compile +''' + +from distutils.core import setup, Extension +from Cython.Build import cythonize +from Cython.Distutils import build_ext +import numpy + +setup( + name='Sim3DR_Cython', # not the package name + cmdclass={'build_ext': build_ext}, + ext_modules=[Extension("Sim3DR_Cython", + sources=["lib/rasterize.pyx", "lib/rasterize_kernel.cpp"], + language='c++', + include_dirs=[numpy.get_include()], + extra_compile_args=["-std=c++11"])], +) diff --git a/Sim3DR/tests/CMakeLists.txt b/Sim3DR/tests/CMakeLists.txt new file mode 100644 index 0000000..5bea0c7 --- /dev/null +++ b/Sim3DR/tests/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 2.8) + +set(TARGET test) +project(${TARGET}) + +#find_package( OpenCV REQUIRED ) +#include_directories( ${OpenCV_INCLUDE_DIRS} ) + +#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -O3") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++11") +add_executable(${TARGET} test.cpp rasterize_kernel.cpp io.cpp) +target_include_directories(${TARGET} PRIVATE ${PROJECT_SOURCE_DIR}) diff --git a/Sim3DR/tests/io.cpp b/Sim3DR/tests/io.cpp new file mode 100644 index 0000000..cd7b115 --- /dev/null +++ b/Sim3DR/tests/io.cpp @@ -0,0 +1,89 @@ +#include "io.h" + +//void load_obj(const string obj_fp, float* vertices, float* colors, float* triangles){ +// string line; +// ifstream in(obj_fp); +// +// if(in.is_open()){ +// while (getline(in, line)){ +// stringstream ss(line); +// +// char t; // type: v, f +// ss >> t; +// if (t == 'v'){ +// +// } +// } +// } +//} + +void load_obj(const char *obj_fp, float *vertices, float *colors, int *triangles, int nver, int ntri) { + FILE *fp; + fp = fopen(obj_fp, "r"); + + char t; // type: v or f + if (fp != nullptr) { + for (int i = 0; i < nver; ++i) { + fscanf(fp, "%c", &t); + for (int j = 0; j < 3; ++j) + fscanf(fp, " %f", &vertices[3 * i + j]); + for (int j = 0; j < 3; ++j) + fscanf(fp, " %f", &colors[3 * i + j]); + fscanf(fp, "\n"); + } +// fscanf(fp, "%c", &t); + for (int i = 0; i < ntri; ++i) { + fscanf(fp, "%c", &t); + for (int j = 0; j < 3; ++j) { + fscanf(fp, " %d", &triangles[3 * i + j]); + triangles[3 * i + j] -= 1; + } + fscanf(fp, "\n"); + } + + fclose(fp); + } +} + +void load_ply(const char *ply_fp, float *vertices, int *triangles, int nver, int ntri) { + FILE *fp; + fp = fopen(ply_fp, "r"); + +// char s[256]; + char t; + if (fp != nullptr) { +// for (int i = 0; i < 9; ++i) +// fscanf(fp, "%s", s); + for (int i = 0; i < nver; ++i) + fscanf(fp, "%f %f %f\n", &vertices[3 * i], &vertices[3 * i + 1], &vertices[3 * i + 2]); + + for (int i = 0; i < ntri; ++i) + fscanf(fp, "%c %d %d %d\n", &t, &triangles[3 * i], &triangles[3 * i + 1], &triangles[3 * i + 2]); + + fclose(fp); + } +} + +void write_ppm(const char *filename, unsigned char *img, int h, int w, int c) { + FILE *fp; + //open file for output + fp = fopen(filename, "wb"); + if (!fp) { + fprintf(stderr, "Unable to open file '%s'\n", filename); + exit(1); + } + + //write the header file + //image format + fprintf(fp, "P6\n"); + + //image size + fprintf(fp, "%d %d\n", w, h); + + // rgb component depth + fprintf(fp, "%d\n", MAX_PXL_VALUE); + + // pixel data + fwrite(img, sizeof(unsigned char), size_t(h * w * c), fp); + fclose(fp); +} \ No newline at end of file diff --git a/Sim3DR/tests/io.h b/Sim3DR/tests/io.h new file mode 100644 index 0000000..1f6d3ee --- /dev/null +++ b/Sim3DR/tests/io.h @@ -0,0 +1,20 @@ +#ifndef IO_H_ +#define IO_H_ + +#include +#include +#include +#include +#include + +using namespace std; + +#define MAX_PXL_VALUE 255 + +void load_obj(const char* obj_fp, float* vertices, float* colors, int* triangles, int nver, int ntri); +void load_ply(const char* ply_fp, float* vertices, int* triangles, int nver, int ntri); + + +void write_ppm(const char *filename, unsigned char *img, int h, int w, int c); + +#endif \ No newline at end of file diff --git a/Sim3DR/tests/test.cpp b/Sim3DR/tests/test.cpp new file mode 100644 index 0000000..7427368 --- /dev/null +++ b/Sim3DR/tests/test.cpp @@ -0,0 +1,172 @@ +/* + * Tesing cases + */ + +#include +#include +#include "rasterize.h" +#include "io.h" + +void test_isPointInTri() { + Point p0(0, 0); + Point p1(1, 0); + Point p2(1, 1); + + Point p(0.2, 0.2); + + if (is_point_in_tri(p, p0, p1, p2)) + std::cout << "In"; + else + std::cout << "Out"; + std::cout << std::endl; +} + +void test_getPointWeight() { + Point p0(0, 0); + Point p1(1, 0); + Point p2(1, 1); + + Point p(0.2, 0.2); + + float weight[3]; + get_point_weight(weight, p, p0, p1, p2); + std::cout << weight[0] << " " << weight[1] << " " << weight[2] << std::endl; +} + +void test_get_tri_normal() { + float tri_normal[3]; +// float vertices[9] = {1, 0, 0, 0, 0, 0, 0, 1, 0}; + float vertices[9] = {1, 1.1, 0, 0, 0, 0, 0, 0.6, 0.7}; + int triangles[3] = {0, 1, 2}; + int ntri = 1; + + _get_tri_normal(tri_normal, vertices, triangles, ntri); + + for (int i = 0; i < 3; ++i) + std::cout << tri_normal[i] << ", "; + std::cout << std::endl; +} + +void test_load_obj() { + const char *fp = "../data/vd005_mesh.obj"; + int nver = 35709; + int ntri = 70789; + + auto *vertices = new float[nver]; + auto *colors = new float[nver]; + auto *triangles = new int[ntri]; + load_obj(fp, vertices, colors, triangles, nver, ntri); + + delete[] vertices; + delete[] colors; + delete[] triangles; +} + +void test_render() { + // 1. loading obj +// const char *fp = "/Users/gjz/gjzprojects/Sim3DR/data/vd005_mesh.obj"; + const char *fp = "/Users/gjz/gjzprojects/Sim3DR/data/face1.obj"; + int nver = 35709; //53215; //35709; + int ntri = 70789; //105840;//70789; + + auto *vertices = new float[3 * nver]; + auto *colors = new float[3 * nver]; + auto *triangles = new int[3 * ntri]; + load_obj(fp, vertices, colors, triangles, nver, ntri); + + // 2. rendering + int h = 224, w = 224, c = 3; + + // enlarging + int scale = 4; + h *= scale; + w *= scale; + for (int i = 0; i < nver * 3; ++i) vertices[i] *= scale; + + auto *image = new unsigned char[h * w * c](); + auto *depth_buffer = new float[h * w](); + + for (int i = 0; i < h * w; ++i) depth_buffer[i] = -999999; + + clock_t t; + t = clock(); + + _rasterize(image, vertices, triangles, colors, depth_buffer, ntri, h, w, c, true); + t = clock() - t; + double time_taken = ((double) t) / CLOCKS_PER_SEC; // in seconds + printf("Render took %f seconds to execute \n", time_taken); + + +// auto *image_char = new u_char[h * w * c](); +// for (int i = 0; i < h * w * c; ++i) +// image_char[i] = u_char(255 * image[i]); + write_ppm("res.ppm", image, h, w, c); + +// delete[] image_char; + delete[] vertices; + delete[] colors; + delete[] triangles; + delete[] image; + delete[] depth_buffer; +} + +void test_light() { + // 1. loading obj + const char *fp = "/Users/gjz/gjzprojects/Sim3DR/data/emma_input_0_noheader.ply"; + int nver = 53215; //35709; + int ntri = 105840; //70789; + + auto *vertices = new float[3 * nver]; + auto *colors = new float[3 * nver]; + auto *triangles = new int[3 * ntri]; + load_ply(fp, vertices, triangles, nver, ntri); + + // 2. rendering +// int h = 1901, w = 3913, c = 3; + int h = 2000, w = 4000, c = 3; + + // enlarging +// int scale = 1; +// h *= scale; +// w *= scale; +// for (int i = 0; i < nver * 3; ++i) vertices[i] *= scale; + + auto *image = new unsigned char[h * w * c](); + auto *depth_buffer = new float[h * w](); + + for (int i = 0; i < h * w; ++i) depth_buffer[i] = -999999; + for (int i = 0; i < 3 * nver; ++i) colors[i] = 0.8; + + clock_t t; + t = clock(); + + _rasterize(image, vertices, triangles, colors, depth_buffer, ntri, h, w, c, true); + t = clock() - t; + double time_taken = ((double) t) / CLOCKS_PER_SEC; // in seconds + printf("Render took %f seconds to execute \n", time_taken); + + +// auto *image_char = new u_char[h * w * c](); +// for (int i = 0; i < h * w * c; ++i) +// image_char[i] = u_char(255 * image[i]); + write_ppm("emma.ppm", image, h, w, c); + +// delete[] image_char; + delete[] vertices; + delete[] colors; + delete[] triangles; + delete[] image; + delete[] depth_buffer; +} + +int main(int argc, char *argv[]) { +// std::cout << "Hello CMake!" << std::endl; + +// test_isPointInTri(); +// test_getPointWeight(); +// test_get_tri_normal(); +// test_load_obj(); +// test_render(); + test_light(); + return 0; +} \ No newline at end of file

w`qi$VMf3Oz9;5h@__m>G6=cbaqXCk)(hQ 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