diff --git ./DSFD/eval_tools/box_overlaps.c b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/eval_tools/box_overlaps.c

deleted file mode 100644

index d798622fc2..0000000000

--- ./DSFD/eval_tools/box_overlaps.c

+++ /dev/null

@@ -1,6683 +0,0 @@

-/* Generated by Cython 0.29.24 */

-

-/* BEGIN: Cython Metadata

-{

-    "distutils": {

-        "depends": [

-            "/root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/core/include/numpy/arrayobject.h",

-            "/root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/core/include/numpy/ufuncobject.h"

-        ],

-        "include_dirs": [

-            "/root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/core/include"

-        ],

-        "name": "bbox",

-        "sources": [

-            "box_overlaps.pyx"

-        ]

-    },

-    "module_name": "bbox"

-}

-END: Cython Metadata */

-

-#ifndef PY_SSIZE_T_CLEAN

-#define PY_SSIZE_T_CLEAN

-#endif /* PY_SSIZE_T_CLEAN */

-#include "Python.h"

-#ifndef Py_PYTHON_H

-    #error Python headers needed to compile C extensions, please install development version of Python.

-#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)

-    #error Cython requires Python 2.6+ or Python 3.3+.

-#else

-#define CYTHON_ABI "0_29_24"

-#define CYTHON_HEX_VERSION 0x001D18F0

-#define CYTHON_FUTURE_DIVISION 0

-#include <stddef.h>

-#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<class T> 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 <stdint.h>

-#endif

-#ifndef CYTHON_FALLTHROUGH

-  #if defined(__cplusplus) && __cplusplus >= 201103L

-    #if __has_cpp_attribute(fallthrough)

-      #define CYTHON_FALLTHROUGH [[fallthrough]]

-    #elif __has_cpp_attribute(clang::fallthrough)

-      #define CYTHON_FALLTHROUGH [[clang::fallthrough]]

-    #elif __has_cpp_attribute(gnu::fallthrough)

-      #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]

-    #endif

-  #endif

-  #ifndef CYTHON_FALLTHROUGH

-    #if __has_attribute(fallthrough)

-      #define CYTHON_FALLTHROUGH __attribute__((fallthrough))

-    #else

-      #define CYTHON_FALLTHROUGH

-    #endif

-  #endif

-  #if defined(__clang__ ) && defined(__apple_build_version__)

-    #if __apple_build_version__ < 7000000

-      #undef  CYTHON_FALLTHROUGH

-      #define CYTHON_FALLTHROUGH

-    #endif

-  #endif

-#endif

-

-#ifndef CYTHON_INLINE

-  #if defined(__clang__)

-    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))

-  #elif defined(__GNUC__)

-    #define CYTHON_INLINE __inline__

-  #elif defined(_MSC_VER)

-    #define CYTHON_INLINE __inline

-  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L

-    #define CYTHON_INLINE inline

-  #else

-    #define CYTHON_INLINE

-  #endif

-#endif

-

-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)

-  #define Py_OptimizeFlag 0

-#endif

-#define __PYX_BUILD_PY_SSIZE_T "n"

-#define CYTHON_FORMAT_SSIZE_T "z"

-#if PY_MAJOR_VERSION < 3

-  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"

-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\

-          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)

-  #define __Pyx_DefaultClassType PyClass_Type

-#else

-  #define __Pyx_BUILTIN_MODULE_NAME "builtins"

-#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2

-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\

-          PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)

-#else

-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\

-          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)

-#endif

-  #define __Pyx_DefaultClassType PyType_Type

-#endif

-#ifndef Py_TPFLAGS_CHECKTYPES

-  #define Py_TPFLAGS_CHECKTYPES 0

-#endif

-#ifndef Py_TPFLAGS_HAVE_INDEX

-  #define Py_TPFLAGS_HAVE_INDEX 0

-#endif

-#ifndef Py_TPFLAGS_HAVE_NEWBUFFER

-  #define Py_TPFLAGS_HAVE_NEWBUFFER 0

-#endif

-#ifndef Py_TPFLAGS_HAVE_FINALIZE

-  #define Py_TPFLAGS_HAVE_FINALIZE 0

-#endif

-#ifndef METH_STACKLESS

-  #define METH_STACKLESS 0

-#endif

-#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)

-  #ifndef METH_FASTCALL

-     #define METH_FASTCALL 0x80

-  #endif

-  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);

-  typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,

-                                                          Py_ssize_t nargs, PyObject *kwnames);

-#else

-  #define __Pyx_PyCFunctionFast _PyCFunctionFast

-  #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords

-#endif

-#if CYTHON_FAST_PYCCALL

-#define __Pyx_PyFastCFunction_Check(func)\

-    ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)))))

-#else

-#define __Pyx_PyFastCFunction_Check(func) 0

-#endif

-#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)

-  #define PyObject_Malloc(s)   PyMem_Malloc(s)

-  #define PyObject_Free(p)     PyMem_Free(p)

-  #define PyObject_Realloc(p)  PyMem_Realloc(p)

-#endif

-#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1

-  #define PyMem_RawMalloc(n)           PyMem_Malloc(n)

-  #define PyMem_RawRealloc(p, n)       PyMem_Realloc(p, n)

-  #define PyMem_RawFree(p)             PyMem_Free(p)

-#endif

-#if CYTHON_COMPILING_IN_PYSTON

-  #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)

-  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)

-#else

-  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)

-  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)

-#endif

-#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000

-  #define __Pyx_PyThreadState_Current PyThreadState_GET()

-#elif PY_VERSION_HEX >= 0x03060000

-  #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()

-#elif PY_VERSION_HEX >= 0x03000000

-  #define __Pyx_PyThreadState_Current PyThreadState_GET()

-#else

-  #define __Pyx_PyThreadState_Current _PyThreadState_Current

-#endif

-#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)

-#include "pythread.h"

-#define Py_tss_NEEDS_INIT 0

-typedef int Py_tss_t;

-static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {

-  *key = PyThread_create_key();

-  return 0;

-}

-static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {

-  Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));

-  *key = Py_tss_NEEDS_INIT;

-  return key;

-}

-static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {

-  PyObject_Free(key);

-}

-static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {

-  return *key != Py_tss_NEEDS_INIT;

-}

-static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {

-  PyThread_delete_key(*key);

-  *key = Py_tss_NEEDS_INIT;

-}

-static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {

-  return PyThread_set_key_value(*key, value);

-}

-static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {

-  return PyThread_get_key_value(*key);

-}

-#endif

-#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)

-#define __Pyx_PyDict_NewPresized(n)  ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))

-#else

-#define __Pyx_PyDict_NewPresized(n)  PyDict_New()

-#endif

-#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION

-  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)

-  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)

-#else

-  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)

-  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)

-#endif

-#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS

-#define __Pyx_PyDict_GetItemStr(dict, name)  _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)

-#else

-#define __Pyx_PyDict_GetItemStr(dict, name)  PyDict_GetItem(dict, name)

-#endif

-#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)

-  #define CYTHON_PEP393_ENABLED 1

-  #if defined(PyUnicode_IS_READY)

-  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\

-                                              0 : _PyUnicode_Ready((PyObject *)(op)))

-  #else

-  #define __Pyx_PyUnicode_READY(op)       (0)

-  #endif

-  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)

-  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)

-  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)

-  #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)

-  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)

-  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)

-  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)

-  #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)

-  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000

-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))

-  #else

-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))

-  #endif

-  #else

-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))

-  #endif

-#else

-  #define CYTHON_PEP393_ENABLED 0

-  #define PyUnicode_1BYTE_KIND  1

-  #define PyUnicode_2BYTE_KIND  2

-  #define PyUnicode_4BYTE_KIND  4

-  #define __Pyx_PyUnicode_READY(op)       (0)

-  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)

-  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))

-  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)

-  #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))

-  #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))

-  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))

-  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)

-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))

-#endif

-#if CYTHON_COMPILING_IN_PYPY

-  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)

-  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)

-#else

-  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)

-  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\

-      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))

-#endif

-#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)

-  #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)

-#endif

-#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)

-  #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)

-#endif

-#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)

-  #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)

-#endif

-#define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))

-#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))

-#if PY_MAJOR_VERSION >= 3

-  #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)

-#else

-  #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)

-#endif

-#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)

-  #define PyObject_ASCII(o)            PyObject_Repr(o)

-#endif

-#if PY_MAJOR_VERSION >= 3

-  #define PyBaseString_Type            PyUnicode_Type

-  #define PyStringObject               PyUnicodeObject

-  #define PyString_Type                PyUnicode_Type

-  #define PyString_Check               PyUnicode_Check

-  #define PyString_CheckExact          PyUnicode_CheckExact

-#ifndef PyObject_Unicode

-  #define PyObject_Unicode             PyObject_Str

-#endif

-#endif

-#if PY_MAJOR_VERSION >= 3

-  #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)

-  #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)

-#else

-  #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))

-  #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))

-#endif

-#ifndef PySet_CheckExact

-  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)

-#endif

-#if PY_VERSION_HEX >= 0x030900A4

-  #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt)

-  #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size)

-#else

-  #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)

-  #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size)

-#endif

-#if CYTHON_ASSUME_SAFE_MACROS

-  #define __Pyx_PySequence_SIZE(seq)  Py_SIZE(seq)

-#else

-  #define __Pyx_PySequence_SIZE(seq)  PySequence_Size(seq)

-#endif

-#if PY_MAJOR_VERSION >= 3

-  #define PyIntObject                  PyLongObject

-  #define PyInt_Type                   PyLong_Type

-  #define PyInt_Check(op)              PyLong_Check(op)

-  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)

-  #define PyInt_FromString             PyLong_FromString

-  #define PyInt_FromUnicode            PyLong_FromUnicode

-  #define PyInt_FromLong               PyLong_FromLong

-  #define PyInt_FromSize_t             PyLong_FromSize_t

-  #define PyInt_FromSsize_t            PyLong_FromSsize_t

-  #define PyInt_AsLong                 PyLong_AsLong

-  #define PyInt_AS_LONG                PyLong_AS_LONG

-  #define PyInt_AsSsize_t              PyLong_AsSsize_t

-  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask

-  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask

-  #define PyNumber_Int                 PyNumber_Long

-#endif

-#if PY_MAJOR_VERSION >= 3

-  #define PyBoolObject                 PyLongObject

-#endif

-#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY

-  #ifndef PyUnicode_InternFromString

-    #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)

-  #endif

-#endif

-#if PY_VERSION_HEX < 0x030200A4

-  typedef long Py_hash_t;

-  #define __Pyx_PyInt_FromHash_t PyInt_FromLong

-  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong

-#else

-  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t

-  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t

-#endif

-#if PY_MAJOR_VERSION >= 3

-  #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func))

-#else

-  #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)

-#endif

-#if CYTHON_USE_ASYNC_SLOTS

-  #if PY_VERSION_HEX >= 0x030500B1

-    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods

-    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)

-  #else

-    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))

-  #endif

-#else

-  #define __Pyx_PyType_AsAsync(obj) NULL

-#endif

-#ifndef __Pyx_PyAsyncMethodsStruct

-    typedef struct {

-        unaryfunc am_await;

-        unaryfunc am_aiter;

-        unaryfunc am_anext;

-    } __Pyx_PyAsyncMethodsStruct;

-#endif

-

-#if defined(WIN32) || defined(MS_WINDOWS)

-  #define _USE_MATH_DEFINES

-#endif

-#include <math.h>

-#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__bbox

-#define __PYX_HAVE_API__bbox

-/* Early includes */

-#include <string.h>

-#include <stdio.h>

-#include "numpy/arrayobject.h"

-#include "numpy/ufuncobject.h"

-

-    /* NumPy API declarations from "numpy/__init__.pxd" */

-    

-#ifdef _OPENMP

-#include <omp.h>

-#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 <cstdlib>

-    #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 <complex>

-  #else

-    #include <complex.h>

-  #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[] = {

-  "box_overlaps.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;

-

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":689

- * # 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":690

- * 

- * 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/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

- * #ctypedef npy_int96      int96_t

- */

-typedef npy_int32 __pyx_t_5numpy_int32_t;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":692

- * 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":696

- * #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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":697

- * 

- * 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/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

- * #ctypedef npy_uint96     uint96_t

- */

-typedef npy_uint32 __pyx_t_5numpy_uint32_t;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":699

- * 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":703

- * #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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":704

- * 

- * 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":713

- * # 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":714

- * # 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":715

- * 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":717

- * 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":718

- * 

- * ctypedef npy_ulong      uint_t

- * ctypedef npy_ulonglong  ulong_t             # <<<<<<<<<<<<<<

- * ctypedef npy_ulonglong  ulonglong_t

- * 

- */

-typedef npy_ulonglong __pyx_t_5numpy_ulong_t;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":719

- * 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":721

- * ctypedef npy_ulonglong  ulonglong_t

- * 

- * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<

- * ctypedef npy_uintp      uintp_t

- * 

- */

-typedef npy_intp __pyx_t_5numpy_intp_t;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":722

- * 

- * ctypedef npy_intp       intp_t

- * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<

- * 

- * ctypedef npy_double     float_t

- */

-typedef npy_uintp __pyx_t_5numpy_uintp_t;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":724

- * 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":725

- * 

- * ctypedef npy_double     float_t

- * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<

- * ctypedef npy_longdouble longdouble_t

- * 

- */

-typedef npy_double __pyx_t_5numpy_double_t;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":726

- * 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;

-

-/* "box_overlaps.pyx":13

- * 

- * DTYPE = np.float

- * ctypedef np.float_t DTYPE_t             # <<<<<<<<<<<<<<

- * 

- * def bbox_overlaps(

- */

-typedef __pyx_t_5numpy_float_t __pyx_t_4bbox_DTYPE_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 ---*/

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":728

- * 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":729

- * 

- * ctypedef npy_cfloat      cfloat_t

- * ctypedef npy_cdouble     cdouble_t             # <<<<<<<<<<<<<<

- * ctypedef npy_clongdouble clongdouble_t

- * 

- */

-typedef npy_cdouble __pyx_t_5numpy_cdouble_t;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":730

- * 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;

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":732

- * 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)

-

-/* PyObjectGetAttrStr.proto */

-#if CYTHON_USE_TYPE_SLOTS

-static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);

-#else

-#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)

-#endif

-

-/* GetBuiltinName.proto */

-static PyObject *__Pyx_GetBuiltinName(PyObject *name);

-

-/* RaiseArgTupleInvalid.proto */

-static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,

-    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);

-

-/* RaiseDoubleKeywords.proto */

-static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);

-

-/* ParseKeywords.proto */

-static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\

-    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\

-    const char* function_name);

-

-/* ArgTypeTest.proto */

-#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\

-    ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\

-        __Pyx__ArgTypeTest(obj, type, name, exact))

-static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);

-

-/* 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 };

-

-/* PyDictVersioning.proto */

-#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS

-#define __PYX_DICT_VERSION_INIT  ((PY_UINT64_T) -1)

-#define __PYX_GET_DICT_VERSION(dict)  (((PyDictObject*)(dict))->ma_version_tag)

-#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\

-    (version_var) = __PYX_GET_DICT_VERSION(dict);\

-    (cache_var) = (value);

-#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\

-    static PY_UINT64_T __pyx_dict_version = 0;\

-    static PyObject *__pyx_dict_cached_value = NULL;\

-    if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\

-        (VAR) = __pyx_dict_cached_value;\

-    } else {\

-        (VAR) = __pyx_dict_cached_value = (LOOKUP);\

-        __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\

-    }\

-}

-static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);

-static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);

-static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);

-#else

-#define __PYX_GET_DICT_VERSION(dict)  (0)

-#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)

-#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP)  (VAR) = (LOOKUP);

-#endif

-

-/* GetModuleGlobalName.proto */

-#if CYTHON_USE_DICT_VERSIONS

-#define __Pyx_GetModuleGlobalName(var, name)  {\

-    static PY_UINT64_T __pyx_dict_version = 0;\

-    static PyObject *__pyx_dict_cached_value = NULL;\

-    (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\

-        (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\

-        __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\

-}

-#define __Pyx_GetModuleGlobalNameUncached(var, name)  {\

-    PY_UINT64_T __pyx_dict_version;\

-    PyObject *__pyx_dict_cached_value;\

-    (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\

-}

-static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);

-#else

-#define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)

-#define __Pyx_GetModuleGlobalNameUncached(var, name)  (var) = __Pyx__GetModuleGlobalName(name)

-static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);

-#endif

-

-/* PyObjectCall.proto */

-#if CYTHON_COMPILING_IN_CPYTHON

-static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);

-#else

-#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)

-#endif

-

-/* ExtTypeTest.proto */

-static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);

-

-/* BufferIndexError.proto */

-static void __Pyx_RaiseBufferIndexError(int axis);

-

-#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1)

-/* PyThreadStateGet.proto */

-#if CYTHON_FAST_THREAD_STATE

-#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;

-#define __Pyx_PyThreadState_assign  __pyx_tstate = __Pyx_PyThreadState_Current;

-#define __Pyx_PyErr_Occurred()  __pyx_tstate->curexc_type

-#else

-#define __Pyx_PyThreadState_declare

-#define __Pyx_PyThreadState_assign

-#define __Pyx_PyErr_Occurred()  PyErr_Occurred()

-#endif

-

-/* PyErrFetchRestore.proto */

-#if CYTHON_FAST_THREAD_STATE

-#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)

-#define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)

-#define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)

-#define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)

-#define __Pyx_ErrFetch(type, value, tb)    __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)

-static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);

-static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);

-#if CYTHON_COMPILING_IN_CPYTHON

-#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))

-#else

-#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)

-#endif

-#else

-#define __Pyx_PyErr_Clear() PyErr_Clear()

-#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)

-#define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)

-#define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)

-#define __Pyx_ErrRestoreInState(tstate, type, value, tb)  PyErr_Restore(type, value, tb)

-#define __Pyx_ErrFetchInState(tstate, type, value, tb)  PyErr_Fetch(type, value, tb)

-#define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)

-#define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)

-#endif

-

-/* GetTopmostException.proto */

-#if CYTHON_USE_EXC_INFO_STACK

-static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);

-#endif

-

-/* SaveResetException.proto */

-#if CYTHON_FAST_THREAD_STATE

-#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)

-static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);

-#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)

-static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);

-#else

-#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)

-#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)

-#endif

-

-/* PyErrExceptionMatches.proto */

-#if CYTHON_FAST_THREAD_STATE

-#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)

-static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);

-#else

-#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)

-#endif

-

-/* GetException.proto */

-#if CYTHON_FAST_THREAD_STATE

-#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)

-static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);

-#else

-static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);

-#endif

-

-/* RaiseException.proto */

-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);

-

-/* TypeImport.proto */

-#ifndef __PYX_HAVE_RT_ImportType_proto

-#define __PYX_HAVE_RT_ImportType_proto

-enum __Pyx_ImportType_CheckSize {

-   __Pyx_ImportType_CheckSize_Error = 0,

-   __Pyx_ImportType_CheckSize_Warn = 1,

-   __Pyx_ImportType_CheckSize_Ignore = 2

-};

-static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size);

-#endif

-

-/* Import.proto */

-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);

-

-/* CLineInTraceback.proto */

-#ifdef CYTHON_CLINE_IN_TRACEBACK

-#define __Pyx_CLineForTraceback(tstate, c_line)  (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)

-#else

-static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);

-#endif

-

-/* CodeObjectCache.proto */

-typedef struct {

-    PyCodeObject* code_object;

-    int code_line;

-} __Pyx_CodeObjectCacheEntry;

-struct __Pyx_CodeObjectCache {

-    int count;

-    int max_count;

-    __Pyx_CodeObjectCacheEntry* entries;

-};

-static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};

-static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);

-static PyCodeObject *__pyx_find_code_object(int code_line);

-static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);

-

-/* AddTraceback.proto */

-static void __Pyx_AddTraceback(const char *funcname, int c_line,

-                               int py_line, const char *filename);

-

-/* BufferStructDeclare.proto */

-typedef struct {

-  Py_ssize_t shape, strides, suboffsets;

-} __Pyx_Buf_DimInfo;

-typedef struct {

-  size_t refcount;

-  Py_buffer pybuffer;

-} __Pyx_Buffer;

-typedef struct {

-  __Pyx_Buffer *rcbuffer;

-  char *data;

-  __Pyx_Buf_DimInfo diminfo[8];

-} __Pyx_LocalBuf_ND;

-

-#if PY_MAJOR_VERSION < 3

-    static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);

-    static void __Pyx_ReleaseBuffer(Py_buffer *view);

-#else

-    #define __Pyx_GetBuffer PyObject_GetBuffer

-    #define __Pyx_ReleaseBuffer PyBuffer_Release

-#endif

-

-

-/* GCCDiagnostics.proto */

-#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))

-#define __Pyx_HAS_GCC_DIAGNOSTIC

-#endif

-

-/* RealImag.proto */

-#if CYTHON_CCOMPLEX

-  #ifdef __cplusplus

-    #define __Pyx_CREAL(z) ((z).real())

-    #define __Pyx_CIMAG(z) ((z).imag())

-  #else

-    #define __Pyx_CREAL(z) (__real__(z))

-    #define __Pyx_CIMAG(z) (__imag__(z))

-  #endif

-#else

-    #define __Pyx_CREAL(z) ((z).real)

-    #define __Pyx_CIMAG(z) ((z).imag)

-#endif

-#if defined(__cplusplus) && CYTHON_CCOMPLEX\

-        && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103)

-    #define __Pyx_SET_CREAL(z,x) ((z).real(x))

-    #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))

-#else

-    #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x)

-    #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)

-#endif

-

-/* Arithmetic.proto */

-#if CYTHON_CCOMPLEX

-    #define __Pyx_c_eq_float(a, b)   ((a)==(b))

-    #define __Pyx_c_sum_float(a, b)  ((a)+(b))

-    #define __Pyx_c_diff_float(a, b) ((a)-(b))

-    #define __Pyx_c_prod_float(a, b) ((a)*(b))

-    #define __Pyx_c_quot_float(a, b) ((a)/(b))

-    #define __Pyx_c_neg_float(a)     (-(a))

-  #ifdef __cplusplus

-    #define __Pyx_c_is_zero_float(z) ((z)==(float)0)

-    #define __Pyx_c_conj_float(z)    (::std::conj(z))

-    #if 1

-        #define __Pyx_c_abs_float(z)     (::std::abs(z))

-        #define __Pyx_c_pow_float(a, b)  (::std::pow(a, b))

-    #endif

-  #else

-    #define __Pyx_c_is_zero_float(z) ((z)==0)

-    #define __Pyx_c_conj_float(z)    (conjf(z))

-    #if 1

-        #define __Pyx_c_abs_float(z)     (cabsf(z))

-        #define __Pyx_c_pow_float(a, b)  (cpowf(a, b))

-    #endif

- #endif

-#else

-    static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex);

-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex);

-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex);

-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex);

-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex);

-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex);

-    static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex);

-    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex);

-    #if 1

-        static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex);

-        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex);

-    #endif

-#endif

-

-/* Arithmetic.proto */

-#if CYTHON_CCOMPLEX

-    #define __Pyx_c_eq_double(a, b)   ((a)==(b))

-    #define __Pyx_c_sum_double(a, b)  ((a)+(b))

-    #define __Pyx_c_diff_double(a, b) ((a)-(b))

-    #define __Pyx_c_prod_double(a, b) ((a)*(b))

-    #define __Pyx_c_quot_double(a, b) ((a)/(b))

-    #define __Pyx_c_neg_double(a)     (-(a))

-  #ifdef __cplusplus

-    #define __Pyx_c_is_zero_double(z) ((z)==(double)0)

-    #define __Pyx_c_conj_double(z)    (::std::conj(z))

-    #if 1

-        #define __Pyx_c_abs_double(z)     (::std::abs(z))

-        #define __Pyx_c_pow_double(a, b)  (::std::pow(a, b))

-    #endif

-  #else

-    #define __Pyx_c_is_zero_double(z) ((z)==0)

-    #define __Pyx_c_conj_double(z)    (conj(z))

-    #if 1

-        #define __Pyx_c_abs_double(z)     (cabs(z))

-        #define __Pyx_c_pow_double(a, b)  (cpow(a, b))

-    #endif

- #endif

-#else

-    static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex);

-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex);

-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex);

-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex);

-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex);

-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex);

-    static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex);

-    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex);

-    #if 1

-        static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex);

-        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex);

-    #endif

-#endif

-

-/* CIntToPy.proto */

-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value);

-

-/* CIntFromPy.proto */

-static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_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 *);

-

-/* CIntFromPy.proto */

-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);

-

-/* FastTypeChecks.proto */

-#if CYTHON_COMPILING_IN_CPYTHON

-#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)

-static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);

-static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);

-static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);

-#else

-#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)

-#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)

-#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))

-#endif

-#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)

-

-/* CheckBinaryVersion.proto */

-static int __Pyx_check_binary_version(void);

-

-/* InitStrings.proto */

-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);

-

-

-/* Module declarations from 'cython' */

-

-/* Module declarations from 'cpython.buffer' */

-

-/* Module declarations from 'libc.string' */

-

-/* Module declarations from 'libc.stdio' */

-

-/* Module declarations from '__builtin__' */

-

-/* Module declarations from 'cpython.type' */

-static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0;

-

-/* Module declarations from 'cpython' */

-

-/* Module declarations from 'cpython.object' */

-

-/* Module declarations from 'cpython.ref' */

-

-/* Module declarations from 'cpython.mem' */

-

-/* Module declarations from 'numpy' */

-

-/* Module declarations from 'numpy' */

-static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;

-static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0;

-static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0;

-static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;

-static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0;

-

-/* Module declarations from 'bbox' */

-static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_4bbox_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_4bbox_DTYPE_t), { 0 }, 0, 'R', 0, 0 };

-#define __Pyx_MODULE_NAME "bbox"

-extern int __pyx_module_is_main_bbox;

-int __pyx_module_is_main_bbox = 0;

-

-/* Implementation of 'bbox' */

-static PyObject *__pyx_builtin_range;

-static PyObject *__pyx_builtin_ImportError;

-static const char __pyx_k_K[] = "K";

-static const char __pyx_k_N[] = "N";

-static const char __pyx_k_k[] = "k";

-static const char __pyx_k_n[] = "n";

-static const char __pyx_k_ih[] = "ih";

-static const char __pyx_k_iw[] = "iw";

-static const char __pyx_k_np[] = "np";

-static const char __pyx_k_ua[] = "ua";

-static const char __pyx_k_bbox[] = "bbox";

-static const char __pyx_k_main[] = "__main__";

-static const char __pyx_k_name[] = "__name__";

-static const char __pyx_k_test[] = "__test__";

-static const char __pyx_k_DTYPE[] = "DTYPE";

-static const char __pyx_k_boxes[] = "boxes";

-static const char __pyx_k_dtype[] = "dtype";

-static const char __pyx_k_float[] = "float";

-static const char __pyx_k_numpy[] = "numpy";

-static const char __pyx_k_range[] = "range";

-static const char __pyx_k_zeros[] = "zeros";

-static const char __pyx_k_import[] = "__import__";

-static const char __pyx_k_box_area[] = "box_area";

-static const char __pyx_k_overlaps[] = "overlaps";

-static const char __pyx_k_ImportError[] = "ImportError";

-static const char __pyx_k_query_boxes[] = "query_boxes";

-static const char __pyx_k_bbox_overlaps[] = "bbox_overlaps";

-static const char __pyx_k_box_overlaps_pyx[] = "box_overlaps.pyx";

-static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";

-static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import";

-static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import";

-static PyObject *__pyx_n_s_DTYPE;

-static PyObject *__pyx_n_s_ImportError;

-static PyObject *__pyx_n_s_K;

-static PyObject *__pyx_n_s_N;

-static PyObject *__pyx_n_s_bbox;

-static PyObject *__pyx_n_s_bbox_overlaps;

-static PyObject *__pyx_n_s_box_area;

-static PyObject *__pyx_kp_s_box_overlaps_pyx;

-static PyObject *__pyx_n_s_boxes;

-static PyObject *__pyx_n_s_cline_in_traceback;

-static PyObject *__pyx_n_s_dtype;

-static PyObject *__pyx_n_s_float;

-static PyObject *__pyx_n_s_ih;

-static PyObject *__pyx_n_s_import;

-static PyObject *__pyx_n_s_iw;

-static PyObject *__pyx_n_s_k;

-static PyObject *__pyx_n_s_main;

-static PyObject *__pyx_n_s_n;

-static PyObject *__pyx_n_s_name;

-static PyObject *__pyx_n_s_np;

-static PyObject *__pyx_n_s_numpy;

-static PyObject *__pyx_kp_s_numpy_core_multiarray_failed_to;

-static PyObject *__pyx_kp_s_numpy_core_umath_failed_to_impor;

-static PyObject *__pyx_n_s_overlaps;

-static PyObject *__pyx_n_s_query_boxes;

-static PyObject *__pyx_n_s_range;

-static PyObject *__pyx_n_s_test;

-static PyObject *__pyx_n_s_ua;

-static PyObject *__pyx_n_s_zeros;

-static PyObject *__pyx_pf_4bbox_bbox_overlaps(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_boxes, PyArrayObject *__pyx_v_query_boxes); /* proto */

-static PyObject *__pyx_tuple_;

-static PyObject *__pyx_tuple__2;

-static PyObject *__pyx_tuple__3;

-static PyObject *__pyx_codeobj__4;

-/* Late includes */

-

-/* "box_overlaps.pyx":15

- * ctypedef np.float_t DTYPE_t

- * 

- * def bbox_overlaps(             # <<<<<<<<<<<<<<

- *         np.ndarray[DTYPE_t, ndim=2] boxes,

- *         np.ndarray[DTYPE_t, ndim=2] query_boxes):

- */

-

-/* Python wrapper */

-static PyObject *__pyx_pw_4bbox_1bbox_overlaps(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/

-static char __pyx_doc_4bbox_bbox_overlaps[] = "\n    Parameters\n    ----------\n    boxes: (N, 4) ndarray of float\n    query_boxes: (K, 4) ndarray of float\n    Returns\n    -------\n    overlaps: (N, K) ndarray of overlap between boxes and query_boxes\n    ";

-static PyMethodDef __pyx_mdef_4bbox_1bbox_overlaps = {"bbox_overlaps", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4bbox_1bbox_overlaps, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4bbox_bbox_overlaps};

-static PyObject *__pyx_pw_4bbox_1bbox_overlaps(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {

-  PyArrayObject *__pyx_v_boxes = 0;

-  PyArrayObject *__pyx_v_query_boxes = 0;

-  int __pyx_lineno = 0;

-  const char *__pyx_filename = NULL;

-  int __pyx_clineno = 0;

-  PyObject *__pyx_r = 0;

-  __Pyx_RefNannyDeclarations

-  __Pyx_RefNannySetupContext("bbox_overlaps (wrapper)", 0);

-  {

-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_boxes,&__pyx_n_s_query_boxes,0};

-    PyObject* values[2] = {0,0};

-    if (unlikely(__pyx_kwds)) {

-      Py_ssize_t kw_args;

-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);

-      switch (pos_args) {

-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);

-        CYTHON_FALLTHROUGH;

-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);

-        CYTHON_FALLTHROUGH;

-        case  0: break;

-        default: goto __pyx_L5_argtuple_error;

-      }

-      kw_args = PyDict_Size(__pyx_kwds);

-      switch (pos_args) {

-        case  0:

-        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_boxes)) != 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_query_boxes)) != 0)) kw_args--;

-        else {

-          __Pyx_RaiseArgtupleInvalid("bbox_overlaps", 1, 2, 2, 1); __PYX_ERR(0, 15, __pyx_L3_error)

-        }

-      }

-      if (unlikely(kw_args > 0)) {

-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bbox_overlaps") < 0)) __PYX_ERR(0, 15, __pyx_L3_error)

-      }

-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {

-      goto __pyx_L5_argtuple_error;

-    } else {

-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);

-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);

-    }

-    __pyx_v_boxes = ((PyArrayObject *)values[0]);

-    __pyx_v_query_boxes = ((PyArrayObject *)values[1]);

-  }

-  goto __pyx_L4_argument_unpacking_done;

-  __pyx_L5_argtuple_error:;

-  __Pyx_RaiseArgtupleInvalid("bbox_overlaps", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 15, __pyx_L3_error)

-  __pyx_L3_error:;

-  __Pyx_AddTraceback("bbox.bbox_overlaps", __pyx_clineno, __pyx_lineno, __pyx_filename);

-  __Pyx_RefNannyFinishContext();

-  return NULL;

-  __pyx_L4_argument_unpacking_done:;

-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_boxes), __pyx_ptype_5numpy_ndarray, 1, "boxes", 0))) __PYX_ERR(0, 16, __pyx_L1_error)

-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_query_boxes), __pyx_ptype_5numpy_ndarray, 1, "query_boxes", 0))) __PYX_ERR(0, 17, __pyx_L1_error)

-  __pyx_r = __pyx_pf_4bbox_bbox_overlaps(__pyx_self, __pyx_v_boxes, __pyx_v_query_boxes);

-

-  /* function exit code */

-  goto __pyx_L0;

-  __pyx_L1_error:;

-  __pyx_r = NULL;

-  __pyx_L0:;

-  __Pyx_RefNannyFinishContext();

-  return __pyx_r;

-}

-

-static PyObject *__pyx_pf_4bbox_bbox_overlaps(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_boxes, PyArrayObject *__pyx_v_query_boxes) {

-  unsigned int __pyx_v_N;

-  unsigned int __pyx_v_K;

-  PyArrayObject *__pyx_v_overlaps = 0;

-  __pyx_t_4bbox_DTYPE_t __pyx_v_iw;

-  __pyx_t_4bbox_DTYPE_t __pyx_v_ih;

-  __pyx_t_4bbox_DTYPE_t __pyx_v_box_area;

-  __pyx_t_4bbox_DTYPE_t __pyx_v_ua;

-  unsigned int __pyx_v_k;

-  unsigned int __pyx_v_n;

-  __Pyx_LocalBuf_ND __pyx_pybuffernd_boxes;

-  __Pyx_Buffer __pyx_pybuffer_boxes;

-  __Pyx_LocalBuf_ND __pyx_pybuffernd_overlaps;

-  __Pyx_Buffer __pyx_pybuffer_overlaps;

-  __Pyx_LocalBuf_ND __pyx_pybuffernd_query_boxes;

-  __Pyx_Buffer __pyx_pybuffer_query_boxes;

-  PyObject *__pyx_r = NULL;

-  __Pyx_RefNannyDeclarations

-  PyObject *__pyx_t_1 = NULL;

-  PyObject *__pyx_t_2 = NULL;

-  PyObject *__pyx_t_3 = NULL;

-  PyObject *__pyx_t_4 = NULL;

-  PyArrayObject *__pyx_t_5 = NULL;

-  unsigned int __pyx_t_6;

-  unsigned int __pyx_t_7;

-  unsigned int __pyx_t_8;

-  size_t __pyx_t_9;

-  Py_ssize_t __pyx_t_10;

-  int __pyx_t_11;

-  size_t __pyx_t_12;

-  Py_ssize_t __pyx_t_13;

-  size_t __pyx_t_14;

-  Py_ssize_t __pyx_t_15;

-  size_t __pyx_t_16;

-  Py_ssize_t __pyx_t_17;

-  unsigned int __pyx_t_18;

-  unsigned int __pyx_t_19;

-  unsigned int __pyx_t_20;

-  __pyx_t_4bbox_DTYPE_t __pyx_t_21;

-  __pyx_t_4bbox_DTYPE_t __pyx_t_22;

-  __pyx_t_4bbox_DTYPE_t __pyx_t_23;

-  __pyx_t_4bbox_DTYPE_t __pyx_t_24;

-  int __pyx_t_25;

-  int __pyx_lineno = 0;

-  const char *__pyx_filename = NULL;

-  int __pyx_clineno = 0;

-  __Pyx_RefNannySetupContext("bbox_overlaps", 0);

-  __pyx_pybuffer_overlaps.pybuffer.buf = NULL;

-  __pyx_pybuffer_overlaps.refcount = 0;

-  __pyx_pybuffernd_overlaps.data = NULL;

-  __pyx_pybuffernd_overlaps.rcbuffer = &__pyx_pybuffer_overlaps;

-  __pyx_pybuffer_boxes.pybuffer.buf = NULL;

-  __pyx_pybuffer_boxes.refcount = 0;

-  __pyx_pybuffernd_boxes.data = NULL;

-  __pyx_pybuffernd_boxes.rcbuffer = &__pyx_pybuffer_boxes;

-  __pyx_pybuffer_query_boxes.pybuffer.buf = NULL;

-  __pyx_pybuffer_query_boxes.refcount = 0;

-  __pyx_pybuffernd_query_boxes.data = NULL;

-  __pyx_pybuffernd_query_boxes.rcbuffer = &__pyx_pybuffer_query_boxes;

-  {

-    __Pyx_BufFmt_StackElem __pyx_stack[1];

-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_boxes.rcbuffer->pybuffer, (PyObject*)__pyx_v_boxes, &__Pyx_TypeInfo_nn___pyx_t_4bbox_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 15, __pyx_L1_error)

-  }

-  __pyx_pybuffernd_boxes.diminfo[0].strides = __pyx_pybuffernd_boxes.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_boxes.diminfo[0].shape = __pyx_pybuffernd_boxes.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_boxes.diminfo[1].strides = __pyx_pybuffernd_boxes.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_boxes.diminfo[1].shape = __pyx_pybuffernd_boxes.rcbuffer->pybuffer.shape[1];

-  {

-    __Pyx_BufFmt_StackElem __pyx_stack[1];

-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_query_boxes.rcbuffer->pybuffer, (PyObject*)__pyx_v_query_boxes, &__Pyx_TypeInfo_nn___pyx_t_4bbox_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 15, __pyx_L1_error)

-  }

-  __pyx_pybuffernd_query_boxes.diminfo[0].strides = __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_query_boxes.diminfo[0].shape = __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_query_boxes.diminfo[1].strides = __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_query_boxes.diminfo[1].shape = __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.shape[1];

-

-  /* "box_overlaps.pyx":27

- *     overlaps: (N, K) ndarray of overlap between boxes and query_boxes

- *     """

- *     cdef unsigned int N = boxes.shape[0]             # <<<<<<<<<<<<<<

- *     cdef unsigned int K = query_boxes.shape[0]

- *     cdef np.ndarray[DTYPE_t, ndim=2] overlaps = np.zeros((N, K), dtype=DTYPE)

- */

-  __pyx_v_N = (__pyx_v_boxes->dimensions[0]);

-

-  /* "box_overlaps.pyx":28

- *     """

- *     cdef unsigned int N = boxes.shape[0]

- *     cdef unsigned int K = query_boxes.shape[0]             # <<<<<<<<<<<<<<

- *     cdef np.ndarray[DTYPE_t, ndim=2] overlaps = np.zeros((N, K), dtype=DTYPE)

- *     cdef DTYPE_t iw, ih, box_area

- */

-  __pyx_v_K = (__pyx_v_query_boxes->dimensions[0]);

-

-  /* "box_overlaps.pyx":29

- *     cdef unsigned int N = boxes.shape[0]

- *     cdef unsigned int K = query_boxes.shape[0]

- *     cdef np.ndarray[DTYPE_t, ndim=2] overlaps = np.zeros((N, K), dtype=DTYPE)             # <<<<<<<<<<<<<<

- *     cdef DTYPE_t iw, ih, box_area

- *     cdef DTYPE_t ua

- */

-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_1);

-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_2);

-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

-  __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_1);

-  __pyx_t_3 = __Pyx_PyInt_From_unsigned_int(__pyx_v_K); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_3);

-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 29, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_4);

-  __Pyx_GIVEREF(__pyx_t_1);

-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);

-  __Pyx_GIVEREF(__pyx_t_3);

-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);

-  __pyx_t_1 = 0;

-  __pyx_t_3 = 0;

-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 29, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_3);

-  __Pyx_GIVEREF(__pyx_t_4);

-  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);

-  __pyx_t_4 = 0;

-  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 29, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_4);

-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DTYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_1);

-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_1) < 0) __PYX_ERR(0, 29, __pyx_L1_error)

-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_1);

-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 29, __pyx_L1_error)

-  __pyx_t_5 = ((PyArrayObject *)__pyx_t_1);

-  {

-    __Pyx_BufFmt_StackElem __pyx_stack[1];

-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_overlaps.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_4bbox_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {

-      __pyx_v_overlaps = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_overlaps.rcbuffer->pybuffer.buf = NULL;

-      __PYX_ERR(0, 29, __pyx_L1_error)

-    } else {__pyx_pybuffernd_overlaps.diminfo[0].strides = __pyx_pybuffernd_overlaps.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_overlaps.diminfo[0].shape = __pyx_pybuffernd_overlaps.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_overlaps.diminfo[1].strides = __pyx_pybuffernd_overlaps.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_overlaps.diminfo[1].shape = __pyx_pybuffernd_overlaps.rcbuffer->pybuffer.shape[1];

-    }

-  }

-  __pyx_t_5 = 0;

-  __pyx_v_overlaps = ((PyArrayObject *)__pyx_t_1);

-  __pyx_t_1 = 0;

-

-  /* "box_overlaps.pyx":33

- *     cdef DTYPE_t ua

- *     cdef unsigned int k, n

- *     for k in range(K):             # <<<<<<<<<<<<<<

- *         box_area = (

- *             (query_boxes[k, 2] - query_boxes[k, 0] + 1) *

- */

-  __pyx_t_6 = __pyx_v_K;

-  __pyx_t_7 = __pyx_t_6;

-  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {

-    __pyx_v_k = __pyx_t_8;

-

-    /* "box_overlaps.pyx":35

- *     for k in range(K):

- *         box_area = (

- *             (query_boxes[k, 2] - query_boxes[k, 0] + 1) *             # <<<<<<<<<<<<<<

- *             (query_boxes[k, 3] - query_boxes[k, 1] + 1)

- *         )

- */

-    __pyx_t_9 = __pyx_v_k;

-    __pyx_t_10 = 2;

-    __pyx_t_11 = -1;

-    if (unlikely(__pyx_t_9 >= (size_t)__pyx_pybuffernd_query_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-    if (__pyx_t_10 < 0) {

-      __pyx_t_10 += __pyx_pybuffernd_query_boxes.diminfo[1].shape;

-      if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 1;

-    } else if (unlikely(__pyx_t_10 >= __pyx_pybuffernd_query_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-    if (unlikely(__pyx_t_11 != -1)) {

-      __Pyx_RaiseBufferIndexError(__pyx_t_11);

-      __PYX_ERR(0, 35, __pyx_L1_error)

-    }

-    __pyx_t_12 = __pyx_v_k;

-    __pyx_t_13 = 0;

-    __pyx_t_11 = -1;

-    if (unlikely(__pyx_t_12 >= (size_t)__pyx_pybuffernd_query_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-    if (__pyx_t_13 < 0) {

-      __pyx_t_13 += __pyx_pybuffernd_query_boxes.diminfo[1].shape;

-      if (unlikely(__pyx_t_13 < 0)) __pyx_t_11 = 1;

-    } else if (unlikely(__pyx_t_13 >= __pyx_pybuffernd_query_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-    if (unlikely(__pyx_t_11 != -1)) {

-      __Pyx_RaiseBufferIndexError(__pyx_t_11);

-      __PYX_ERR(0, 35, __pyx_L1_error)

-    }

-

-    /* "box_overlaps.pyx":36

- *         box_area = (

- *             (query_boxes[k, 2] - query_boxes[k, 0] + 1) *

- *             (query_boxes[k, 3] - query_boxes[k, 1] + 1)             # <<<<<<<<<<<<<<

- *         )

- *         for n in range(N):

- */

-    __pyx_t_14 = __pyx_v_k;

-    __pyx_t_15 = 3;

-    __pyx_t_11 = -1;

-    if (unlikely(__pyx_t_14 >= (size_t)__pyx_pybuffernd_query_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-    if (__pyx_t_15 < 0) {

-      __pyx_t_15 += __pyx_pybuffernd_query_boxes.diminfo[1].shape;

-      if (unlikely(__pyx_t_15 < 0)) __pyx_t_11 = 1;

-    } else if (unlikely(__pyx_t_15 >= __pyx_pybuffernd_query_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-    if (unlikely(__pyx_t_11 != -1)) {

-      __Pyx_RaiseBufferIndexError(__pyx_t_11);

-      __PYX_ERR(0, 36, __pyx_L1_error)

-    }

-    __pyx_t_16 = __pyx_v_k;

-    __pyx_t_17 = 1;

-    __pyx_t_11 = -1;

-    if (unlikely(__pyx_t_16 >= (size_t)__pyx_pybuffernd_query_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-    if (__pyx_t_17 < 0) {

-      __pyx_t_17 += __pyx_pybuffernd_query_boxes.diminfo[1].shape;

-      if (unlikely(__pyx_t_17 < 0)) __pyx_t_11 = 1;

-    } else if (unlikely(__pyx_t_17 >= __pyx_pybuffernd_query_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-    if (unlikely(__pyx_t_11 != -1)) {

-      __Pyx_RaiseBufferIndexError(__pyx_t_11);

-      __PYX_ERR(0, 36, __pyx_L1_error)

-    }

-

-    /* "box_overlaps.pyx":35

- *     for k in range(K):

- *         box_area = (

- *             (query_boxes[k, 2] - query_boxes[k, 0] + 1) *             # <<<<<<<<<<<<<<

- *             (query_boxes[k, 3] - query_boxes[k, 1] + 1)

- *         )

- */

-    __pyx_v_box_area = ((((*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_query_boxes.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_query_boxes.diminfo[1].strides)) - (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_query_boxes.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_query_boxes.diminfo[1].strides))) + 1.0) * (((*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_query_boxes.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_query_boxes.diminfo[1].strides)) - (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_query_boxes.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_query_boxes.diminfo[1].strides))) + 1.0));

-

-    /* "box_overlaps.pyx":38

- *             (query_boxes[k, 3] - query_boxes[k, 1] + 1)

- *         )

- *         for n in range(N):             # <<<<<<<<<<<<<<

- *             iw = (

- *                 min(boxes[n, 2], query_boxes[k, 2]) -

- */

-    __pyx_t_18 = __pyx_v_N;

-    __pyx_t_19 = __pyx_t_18;

-    for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {

-      __pyx_v_n = __pyx_t_20;

-

-      /* "box_overlaps.pyx":40

- *         for n in range(N):

- *             iw = (

- *                 min(boxes[n, 2], query_boxes[k, 2]) -             # <<<<<<<<<<<<<<

- *                 max(boxes[n, 0], query_boxes[k, 0]) + 1

- *             )

- */

-      __pyx_t_16 = __pyx_v_k;

-      __pyx_t_17 = 2;

-      __pyx_t_11 = -1;

-      if (unlikely(__pyx_t_16 >= (size_t)__pyx_pybuffernd_query_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-      if (__pyx_t_17 < 0) {

-        __pyx_t_17 += __pyx_pybuffernd_query_boxes.diminfo[1].shape;

-        if (unlikely(__pyx_t_17 < 0)) __pyx_t_11 = 1;

-      } else if (unlikely(__pyx_t_17 >= __pyx_pybuffernd_query_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-      if (unlikely(__pyx_t_11 != -1)) {

-        __Pyx_RaiseBufferIndexError(__pyx_t_11);

-        __PYX_ERR(0, 40, __pyx_L1_error)

-      }

-      __pyx_t_21 = (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_query_boxes.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_query_boxes.diminfo[1].strides));

-      __pyx_t_16 = __pyx_v_n;

-      __pyx_t_17 = 2;

-      __pyx_t_11 = -1;

-      if (unlikely(__pyx_t_16 >= (size_t)__pyx_pybuffernd_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-      if (__pyx_t_17 < 0) {

-        __pyx_t_17 += __pyx_pybuffernd_boxes.diminfo[1].shape;

-        if (unlikely(__pyx_t_17 < 0)) __pyx_t_11 = 1;

-      } else if (unlikely(__pyx_t_17 >= __pyx_pybuffernd_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-      if (unlikely(__pyx_t_11 != -1)) {

-        __Pyx_RaiseBufferIndexError(__pyx_t_11);

-        __PYX_ERR(0, 40, __pyx_L1_error)

-      }

-      __pyx_t_22 = (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_boxes.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_boxes.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_boxes.diminfo[1].strides));

-      if (((__pyx_t_21 < __pyx_t_22) != 0)) {

-        __pyx_t_23 = __pyx_t_21;

-      } else {

-        __pyx_t_23 = __pyx_t_22;

-      }

-

-      /* "box_overlaps.pyx":41

- *             iw = (

- *                 min(boxes[n, 2], query_boxes[k, 2]) -

- *                 max(boxes[n, 0], query_boxes[k, 0]) + 1             # <<<<<<<<<<<<<<

- *             )

- *             if iw > 0:

- */

-      __pyx_t_16 = __pyx_v_k;

-      __pyx_t_17 = 0;

-      __pyx_t_11 = -1;

-      if (unlikely(__pyx_t_16 >= (size_t)__pyx_pybuffernd_query_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-      if (__pyx_t_17 < 0) {

-        __pyx_t_17 += __pyx_pybuffernd_query_boxes.diminfo[1].shape;

-        if (unlikely(__pyx_t_17 < 0)) __pyx_t_11 = 1;

-      } else if (unlikely(__pyx_t_17 >= __pyx_pybuffernd_query_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-      if (unlikely(__pyx_t_11 != -1)) {

-        __Pyx_RaiseBufferIndexError(__pyx_t_11);

-        __PYX_ERR(0, 41, __pyx_L1_error)

-      }

-      __pyx_t_21 = (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_query_boxes.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_query_boxes.diminfo[1].strides));

-      __pyx_t_16 = __pyx_v_n;

-      __pyx_t_17 = 0;

-      __pyx_t_11 = -1;

-      if (unlikely(__pyx_t_16 >= (size_t)__pyx_pybuffernd_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-      if (__pyx_t_17 < 0) {

-        __pyx_t_17 += __pyx_pybuffernd_boxes.diminfo[1].shape;

-        if (unlikely(__pyx_t_17 < 0)) __pyx_t_11 = 1;

-      } else if (unlikely(__pyx_t_17 >= __pyx_pybuffernd_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-      if (unlikely(__pyx_t_11 != -1)) {

-        __Pyx_RaiseBufferIndexError(__pyx_t_11);

-        __PYX_ERR(0, 41, __pyx_L1_error)

-      }

-      __pyx_t_22 = (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_boxes.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_boxes.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_boxes.diminfo[1].strides));

-      if (((__pyx_t_21 > __pyx_t_22) != 0)) {

-        __pyx_t_24 = __pyx_t_21;

-      } else {

-        __pyx_t_24 = __pyx_t_22;

-      }

-

-      /* "box_overlaps.pyx":40

- *         for n in range(N):

- *             iw = (

- *                 min(boxes[n, 2], query_boxes[k, 2]) -             # <<<<<<<<<<<<<<

- *                 max(boxes[n, 0], query_boxes[k, 0]) + 1

- *             )

- */

-      __pyx_v_iw = ((__pyx_t_23 - __pyx_t_24) + 1.0);

-

-      /* "box_overlaps.pyx":43

- *                 max(boxes[n, 0], query_boxes[k, 0]) + 1

- *             )

- *             if iw > 0:             # <<<<<<<<<<<<<<

- *                 ih = (

- *                     min(boxes[n, 3], query_boxes[k, 3]) -

- */

-      __pyx_t_25 = ((__pyx_v_iw > 0.0) != 0);

-      if (__pyx_t_25) {

-

-        /* "box_overlaps.pyx":45

- *             if iw > 0:

- *                 ih = (

- *                     min(boxes[n, 3], query_boxes[k, 3]) -             # <<<<<<<<<<<<<<

- *                     max(boxes[n, 1], query_boxes[k, 1]) + 1

- *                 )

- */

-        __pyx_t_16 = __pyx_v_k;

-        __pyx_t_17 = 3;

-        __pyx_t_11 = -1;

-        if (unlikely(__pyx_t_16 >= (size_t)__pyx_pybuffernd_query_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-        if (__pyx_t_17 < 0) {

-          __pyx_t_17 += __pyx_pybuffernd_query_boxes.diminfo[1].shape;

-          if (unlikely(__pyx_t_17 < 0)) __pyx_t_11 = 1;

-        } else if (unlikely(__pyx_t_17 >= __pyx_pybuffernd_query_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-        if (unlikely(__pyx_t_11 != -1)) {

-          __Pyx_RaiseBufferIndexError(__pyx_t_11);

-          __PYX_ERR(0, 45, __pyx_L1_error)

-        }

-        __pyx_t_24 = (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_query_boxes.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_query_boxes.diminfo[1].strides));

-        __pyx_t_16 = __pyx_v_n;

-        __pyx_t_17 = 3;

-        __pyx_t_11 = -1;

-        if (unlikely(__pyx_t_16 >= (size_t)__pyx_pybuffernd_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-        if (__pyx_t_17 < 0) {

-          __pyx_t_17 += __pyx_pybuffernd_boxes.diminfo[1].shape;

-          if (unlikely(__pyx_t_17 < 0)) __pyx_t_11 = 1;

-        } else if (unlikely(__pyx_t_17 >= __pyx_pybuffernd_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-        if (unlikely(__pyx_t_11 != -1)) {

-          __Pyx_RaiseBufferIndexError(__pyx_t_11);

-          __PYX_ERR(0, 45, __pyx_L1_error)

-        }

-        __pyx_t_23 = (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_boxes.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_boxes.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_boxes.diminfo[1].strides));

-        if (((__pyx_t_24 < __pyx_t_23) != 0)) {

-          __pyx_t_21 = __pyx_t_24;

-        } else {

-          __pyx_t_21 = __pyx_t_23;

-        }

-

-        /* "box_overlaps.pyx":46

- *                 ih = (

- *                     min(boxes[n, 3], query_boxes[k, 3]) -

- *                     max(boxes[n, 1], query_boxes[k, 1]) + 1             # <<<<<<<<<<<<<<

- *                 )

- *                 if ih > 0:

- */

-        __pyx_t_16 = __pyx_v_k;

-        __pyx_t_17 = 1;

-        __pyx_t_11 = -1;

-        if (unlikely(__pyx_t_16 >= (size_t)__pyx_pybuffernd_query_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-        if (__pyx_t_17 < 0) {

-          __pyx_t_17 += __pyx_pybuffernd_query_boxes.diminfo[1].shape;

-          if (unlikely(__pyx_t_17 < 0)) __pyx_t_11 = 1;

-        } else if (unlikely(__pyx_t_17 >= __pyx_pybuffernd_query_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-        if (unlikely(__pyx_t_11 != -1)) {

-          __Pyx_RaiseBufferIndexError(__pyx_t_11);

-          __PYX_ERR(0, 46, __pyx_L1_error)

-        }

-        __pyx_t_24 = (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_query_boxes.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_query_boxes.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_query_boxes.diminfo[1].strides));

-        __pyx_t_16 = __pyx_v_n;

-        __pyx_t_17 = 1;

-        __pyx_t_11 = -1;

-        if (unlikely(__pyx_t_16 >= (size_t)__pyx_pybuffernd_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-        if (__pyx_t_17 < 0) {

-          __pyx_t_17 += __pyx_pybuffernd_boxes.diminfo[1].shape;

-          if (unlikely(__pyx_t_17 < 0)) __pyx_t_11 = 1;

-        } else if (unlikely(__pyx_t_17 >= __pyx_pybuffernd_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-        if (unlikely(__pyx_t_11 != -1)) {

-          __Pyx_RaiseBufferIndexError(__pyx_t_11);

-          __PYX_ERR(0, 46, __pyx_L1_error)

-        }

-        __pyx_t_23 = (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_boxes.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_boxes.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_boxes.diminfo[1].strides));

-        if (((__pyx_t_24 > __pyx_t_23) != 0)) {

-          __pyx_t_22 = __pyx_t_24;

-        } else {

-          __pyx_t_22 = __pyx_t_23;

-        }

-

-        /* "box_overlaps.pyx":45

- *             if iw > 0:

- *                 ih = (

- *                     min(boxes[n, 3], query_boxes[k, 3]) -             # <<<<<<<<<<<<<<

- *                     max(boxes[n, 1], query_boxes[k, 1]) + 1

- *                 )

- */

-        __pyx_v_ih = ((__pyx_t_21 - __pyx_t_22) + 1.0);

-

-        /* "box_overlaps.pyx":48

- *                     max(boxes[n, 1], query_boxes[k, 1]) + 1

- *                 )

- *                 if ih > 0:             # <<<<<<<<<<<<<<

- *                     ua = float(

- *                         (boxes[n, 2] - boxes[n, 0] + 1) *

- */

-        __pyx_t_25 = ((__pyx_v_ih > 0.0) != 0);

-        if (__pyx_t_25) {

-

-          /* "box_overlaps.pyx":50

- *                 if ih > 0:

- *                     ua = float(

- *                         (boxes[n, 2] - boxes[n, 0] + 1) *             # <<<<<<<<<<<<<<

- *                         (boxes[n, 3] - boxes[n, 1] + 1) +

- *                         box_area - iw * ih

- */

-          __pyx_t_16 = __pyx_v_n;

-          __pyx_t_17 = 2;

-          __pyx_t_11 = -1;

-          if (unlikely(__pyx_t_16 >= (size_t)__pyx_pybuffernd_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-          if (__pyx_t_17 < 0) {

-            __pyx_t_17 += __pyx_pybuffernd_boxes.diminfo[1].shape;

-            if (unlikely(__pyx_t_17 < 0)) __pyx_t_11 = 1;

-          } else if (unlikely(__pyx_t_17 >= __pyx_pybuffernd_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-          if (unlikely(__pyx_t_11 != -1)) {

-            __Pyx_RaiseBufferIndexError(__pyx_t_11);

-            __PYX_ERR(0, 50, __pyx_L1_error)

-          }

-          __pyx_t_14 = __pyx_v_n;

-          __pyx_t_15 = 0;

-          __pyx_t_11 = -1;

-          if (unlikely(__pyx_t_14 >= (size_t)__pyx_pybuffernd_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-          if (__pyx_t_15 < 0) {

-            __pyx_t_15 += __pyx_pybuffernd_boxes.diminfo[1].shape;

-            if (unlikely(__pyx_t_15 < 0)) __pyx_t_11 = 1;

-          } else if (unlikely(__pyx_t_15 >= __pyx_pybuffernd_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-          if (unlikely(__pyx_t_11 != -1)) {

-            __Pyx_RaiseBufferIndexError(__pyx_t_11);

-            __PYX_ERR(0, 50, __pyx_L1_error)

-          }

-

-          /* "box_overlaps.pyx":51

- *                     ua = float(

- *                         (boxes[n, 2] - boxes[n, 0] + 1) *

- *                         (boxes[n, 3] - boxes[n, 1] + 1) +             # <<<<<<<<<<<<<<

- *                         box_area - iw * ih

- *                     )

- */

-          __pyx_t_12 = __pyx_v_n;

-          __pyx_t_13 = 3;

-          __pyx_t_11 = -1;

-          if (unlikely(__pyx_t_12 >= (size_t)__pyx_pybuffernd_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-          if (__pyx_t_13 < 0) {

-            __pyx_t_13 += __pyx_pybuffernd_boxes.diminfo[1].shape;

-            if (unlikely(__pyx_t_13 < 0)) __pyx_t_11 = 1;

-          } else if (unlikely(__pyx_t_13 >= __pyx_pybuffernd_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-          if (unlikely(__pyx_t_11 != -1)) {

-            __Pyx_RaiseBufferIndexError(__pyx_t_11);

-            __PYX_ERR(0, 51, __pyx_L1_error)

-          }

-          __pyx_t_9 = __pyx_v_n;

-          __pyx_t_10 = 1;

-          __pyx_t_11 = -1;

-          if (unlikely(__pyx_t_9 >= (size_t)__pyx_pybuffernd_boxes.diminfo[0].shape)) __pyx_t_11 = 0;

-          if (__pyx_t_10 < 0) {

-            __pyx_t_10 += __pyx_pybuffernd_boxes.diminfo[1].shape;

-            if (unlikely(__pyx_t_10 < 0)) __pyx_t_11 = 1;

-          } else if (unlikely(__pyx_t_10 >= __pyx_pybuffernd_boxes.diminfo[1].shape)) __pyx_t_11 = 1;

-          if (unlikely(__pyx_t_11 != -1)) {

-            __Pyx_RaiseBufferIndexError(__pyx_t_11);

-            __PYX_ERR(0, 51, __pyx_L1_error)

-          }

-

-          /* "box_overlaps.pyx":49

- *                 )

- *                 if ih > 0:

- *                     ua = float(             # <<<<<<<<<<<<<<

- *                         (boxes[n, 2] - boxes[n, 0] + 1) *

- *                         (boxes[n, 3] - boxes[n, 1] + 1) +

- */

-          __pyx_v_ua = ((double)((((((*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_boxes.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_boxes.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_boxes.diminfo[1].strides)) - (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_boxes.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_boxes.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_boxes.diminfo[1].strides))) + 1.0) * (((*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_boxes.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_boxes.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_boxes.diminfo[1].strides)) - (*__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_boxes.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_boxes.diminfo[0].strides, __pyx_t_10, __pyx_pybuffernd_boxes.diminfo[1].strides))) + 1.0)) + __pyx_v_box_area) - (__pyx_v_iw * __pyx_v_ih)));

-

-          /* "box_overlaps.pyx":54

- *                         box_area - iw * ih

- *                     )

- *                     overlaps[n, k] = iw * ih / ua             # <<<<<<<<<<<<<<

- *     return overlaps

- */

-          __pyx_t_22 = (__pyx_v_iw * __pyx_v_ih);

-          if (unlikely(__pyx_v_ua == 0)) {

-            PyErr_SetString(PyExc_ZeroDivisionError, "float division");

-            __PYX_ERR(0, 54, __pyx_L1_error)

-          }

-          __pyx_t_9 = __pyx_v_n;

-          __pyx_t_12 = __pyx_v_k;

-          __pyx_t_11 = -1;

-          if (unlikely(__pyx_t_9 >= (size_t)__pyx_pybuffernd_overlaps.diminfo[0].shape)) __pyx_t_11 = 0;

-          if (unlikely(__pyx_t_12 >= (size_t)__pyx_pybuffernd_overlaps.diminfo[1].shape)) __pyx_t_11 = 1;

-          if (unlikely(__pyx_t_11 != -1)) {

-            __Pyx_RaiseBufferIndexError(__pyx_t_11);

-            __PYX_ERR(0, 54, __pyx_L1_error)

-          }

-          *__Pyx_BufPtrStrided2d(__pyx_t_4bbox_DTYPE_t *, __pyx_pybuffernd_overlaps.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_overlaps.diminfo[0].strides, __pyx_t_12, __pyx_pybuffernd_overlaps.diminfo[1].strides) = (__pyx_t_22 / __pyx_v_ua);

-

-          /* "box_overlaps.pyx":48

- *                     max(boxes[n, 1], query_boxes[k, 1]) + 1

- *                 )

- *                 if ih > 0:             # <<<<<<<<<<<<<<

- *                     ua = float(

- *                         (boxes[n, 2] - boxes[n, 0] + 1) *

- */

-        }

-

-        /* "box_overlaps.pyx":43

- *                 max(boxes[n, 0], query_boxes[k, 0]) + 1

- *             )

- *             if iw > 0:             # <<<<<<<<<<<<<<

- *                 ih = (

- *                     min(boxes[n, 3], query_boxes[k, 3]) -

- */

-      }

-    }

-  }

-

-  /* "box_overlaps.pyx":55

- *                     )

- *                     overlaps[n, k] = iw * ih / ua

- *     return overlaps             # <<<<<<<<<<<<<<

- */

-  __Pyx_XDECREF(__pyx_r);

-  __Pyx_INCREF(((PyObject *)__pyx_v_overlaps));

-  __pyx_r = ((PyObject *)__pyx_v_overlaps);

-  goto __pyx_L0;

-

-  /* "box_overlaps.pyx":15

- * ctypedef np.float_t DTYPE_t

- * 

- * def bbox_overlaps(             # <<<<<<<<<<<<<<

- *         np.ndarray[DTYPE_t, ndim=2] boxes,

- *         np.ndarray[DTYPE_t, ndim=2] query_boxes):

- */

-

-  /* function exit code */

-  __pyx_L1_error:;

-  __Pyx_XDECREF(__pyx_t_1);

-  __Pyx_XDECREF(__pyx_t_2);

-  __Pyx_XDECREF(__pyx_t_3);

-  __Pyx_XDECREF(__pyx_t_4);

-  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;

-    __Pyx_PyThreadState_declare

-    __Pyx_PyThreadState_assign

-    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);

-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_boxes.rcbuffer->pybuffer);

-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_overlaps.rcbuffer->pybuffer);

-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_query_boxes.rcbuffer->pybuffer);

-  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}

-  __Pyx_AddTraceback("bbox.bbox_overlaps", __pyx_clineno, __pyx_lineno, __pyx_filename);

-  __pyx_r = NULL;

-  goto __pyx_L2;

-  __pyx_L0:;

-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_boxes.rcbuffer->pybuffer);

-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_overlaps.rcbuffer->pybuffer);

-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_query_boxes.rcbuffer->pybuffer);

-  __pyx_L2:;

-  __Pyx_XDECREF((PyObject *)__pyx_v_overlaps);

-  __Pyx_XGIVEREF(__pyx_r);

-  __Pyx_RefNannyFinishContext();

-  return __pyx_r;

-}

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":734

- * ctypedef npy_cdouble     complex_t

- * 

- * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<

- *     return PyArray_MultiIterNew(1, <void*>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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":735

- * 

- * cdef inline object PyArray_MultiIterNew1(a):

- *     return PyArray_MultiIterNew(1, <void*>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, 735, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_1);

-  __pyx_r = __pyx_t_1;

-  __pyx_t_1 = 0;

-  goto __pyx_L0;

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":734

- * ctypedef npy_cdouble     complex_t

- * 

- * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<

- *     return PyArray_MultiIterNew(1, <void*>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;

-}

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":737

- *     return PyArray_MultiIterNew(1, <void*>a)

- * 

- * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<

- *     return PyArray_MultiIterNew(2, <void*>a, <void*>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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":738

- * 

- * cdef inline object PyArray_MultiIterNew2(a, b):

- *     return PyArray_MultiIterNew(2, <void*>a, <void*>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, 738, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_1);

-  __pyx_r = __pyx_t_1;

-  __pyx_t_1 = 0;

-  goto __pyx_L0;

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":737

- *     return PyArray_MultiIterNew(1, <void*>a)

- * 

- * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<

- *     return PyArray_MultiIterNew(2, <void*>a, <void*>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;

-}

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":740

- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)

- * 

- * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<

- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> 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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":741

- * 

- * cdef inline object PyArray_MultiIterNew3(a, b, c):

- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> 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, 741, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_1);

-  __pyx_r = __pyx_t_1;

-  __pyx_t_1 = 0;

-  goto __pyx_L0;

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":740

- *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)

- * 

- * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<

- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> 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;

-}

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":743

- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)

- * 

- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<

- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> 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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":744

- * 

- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):

- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> 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, 744, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_1);

-  __pyx_r = __pyx_t_1;

-  __pyx_t_1 = 0;

-  goto __pyx_L0;

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":743

- *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)

- * 

- * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<

- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> 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;

-}

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":746

- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)

- * 

- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<

- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> 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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":747

- * 

- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):

- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> 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, 747, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_1);

-  __pyx_r = __pyx_t_1;

-  __pyx_t_1 = 0;

-  goto __pyx_L0;

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":746

- *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)

- * 

- * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<

- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> 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;

-}

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":749

- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)

- * 

- * cdef inline tuple PyDataType_SHAPE(dtype d):             # <<<<<<<<<<<<<<

- *     if PyDataType_HASSUBARRAY(d):

- *         return <tuple>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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":750

- * 

- * cdef inline tuple PyDataType_SHAPE(dtype d):

- *     if PyDataType_HASSUBARRAY(d):             # <<<<<<<<<<<<<<

- *         return <tuple>d.subarray.shape

- *     else:

- */

-  __pyx_t_1 = (PyDataType_HASSUBARRAY(__pyx_v_d) != 0);

-  if (__pyx_t_1) {

-

-    /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":751

- * cdef inline tuple PyDataType_SHAPE(dtype d):

- *     if PyDataType_HASSUBARRAY(d):

- *         return <tuple>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;

-

-    /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":750

- * 

- * cdef inline tuple PyDataType_SHAPE(dtype d):

- *     if PyDataType_HASSUBARRAY(d):             # <<<<<<<<<<<<<<

- *         return <tuple>d.subarray.shape

- *     else:

- */

-  }

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":753

- *         return <tuple>d.subarray.shape

- *     else:

- *         return ()             # <<<<<<<<<<<<<<

- * 

- * 

- */

-  /*else*/ {

-    __Pyx_XDECREF(__pyx_r);

-    __Pyx_INCREF(__pyx_empty_tuple);

-    __pyx_r = __pyx_empty_tuple;

-    goto __pyx_L0;

-  }

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":749

- *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)

- * 

- * cdef inline tuple PyDataType_SHAPE(dtype d):             # <<<<<<<<<<<<<<

- *     if PyDataType_HASSUBARRAY(d):

- *         return <tuple>d.subarray.shape

- */

-

-  /* function exit code */

-  __pyx_L0:;

-  __Pyx_XGIVEREF(__pyx_r);

-  __Pyx_RefNannyFinishContext();

-  return __pyx_r;

-}

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":868

- *     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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":869

- * 

- * 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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":870

- * 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));

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":868

- *     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();

-}

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":872

- *     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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":873

- * 

- * 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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":874

- * cdef inline object get_array_base(ndarray arr):

- *     base = PyArray_BASE(arr)

- *     if base is NULL:             # <<<<<<<<<<<<<<

- *         return None

- *     return <object>base

- */

-  __pyx_t_1 = ((__pyx_v_base == NULL) != 0);

-  if (__pyx_t_1) {

-

-    /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":875

- *     base = PyArray_BASE(arr)

- *     if base is NULL:

- *         return None             # <<<<<<<<<<<<<<

- *     return <object>base

- * 

- */

-    __Pyx_XDECREF(__pyx_r);

-    __pyx_r = Py_None; __Pyx_INCREF(Py_None);

-    goto __pyx_L0;

-

-    /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":874

- * cdef inline object get_array_base(ndarray arr):

- *     base = PyArray_BASE(arr)

- *     if base is NULL:             # <<<<<<<<<<<<<<

- *         return None

- *     return <object>base

- */

-  }

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":876

- *     if base is NULL:

- *         return None

- *     return <object>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;

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":872

- *     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;

-}

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":880

- * # 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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":881

- * # 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:*/ {

-

-      /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":882

- * 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, 882, __pyx_L3_error)

-

-      /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":881

- * # 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:;

-

-    /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":883

- *     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, 883, __pyx_L5_except_error)

-      __Pyx_GOTREF(__pyx_t_5);

-      __Pyx_GOTREF(__pyx_t_6);

-      __Pyx_GOTREF(__pyx_t_7);

-

-      /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":884

- *         __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, 884, __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, 884, __pyx_L5_except_error)

-    }

-    goto __pyx_L5_except_error;

-    __pyx_L5_except_error:;

-

-    /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":881

- * # 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:;

-  }

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":880

- * # 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;

-}

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":886

- *         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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":887

- * 

- * 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:*/ {

-

-      /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":888

- * 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, 888, __pyx_L3_error)

-

-      /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":887

- * 

- * 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:;

-

-    /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":889

- *     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, 889, __pyx_L5_except_error)

-      __Pyx_GOTREF(__pyx_t_5);

-      __Pyx_GOTREF(__pyx_t_6);

-      __Pyx_GOTREF(__pyx_t_7);

-

-      /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":890

- *         _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, 890, __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, 890, __pyx_L5_except_error)

-    }

-    goto __pyx_L5_except_error;

-    __pyx_L5_except_error:;

-

-    /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":887

- * 

- * 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:;

-  }

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":886

- *         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;

-}

-

-/* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":892

- *         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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":893

- * 

- * 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:*/ {

-

-      /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":894

- * 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, 894, __pyx_L3_error)

-

-      /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":893

- * 

- * 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:;

-

-    /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":895

- *     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, 895, __pyx_L5_except_error)

-      __Pyx_GOTREF(__pyx_t_5);

-      __Pyx_GOTREF(__pyx_t_6);

-      __Pyx_GOTREF(__pyx_t_7);

-

-      /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":896

- *         _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, 896, __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, 896, __pyx_L5_except_error)

-    }

-    goto __pyx_L5_except_error;

-    __pyx_L5_except_error:;

-

-    /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":893

- * 

- * 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:;

-  }

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":892

- *         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;

-}

-

-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_bbox(PyObject* module); /*proto*/

-static PyModuleDef_Slot __pyx_moduledef_slots[] = {

-  {Py_mod_create, (void*)__pyx_pymod_create},

-  {Py_mod_exec, (void*)__pyx_pymod_exec_bbox},

-  {0, NULL}

-};

-#endif

-

-static struct PyModuleDef __pyx_moduledef = {

-    PyModuleDef_HEAD_INIT,

-    "bbox",

-    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_DTYPE, __pyx_k_DTYPE, sizeof(__pyx_k_DTYPE), 0, 0, 1, 1},

-  {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1},

-  {&__pyx_n_s_K, __pyx_k_K, sizeof(__pyx_k_K), 0, 0, 1, 1},

-  {&__pyx_n_s_N, __pyx_k_N, sizeof(__pyx_k_N), 0, 0, 1, 1},

-  {&__pyx_n_s_bbox, __pyx_k_bbox, sizeof(__pyx_k_bbox), 0, 0, 1, 1},

-  {&__pyx_n_s_bbox_overlaps, __pyx_k_bbox_overlaps, sizeof(__pyx_k_bbox_overlaps), 0, 0, 1, 1},

-  {&__pyx_n_s_box_area, __pyx_k_box_area, sizeof(__pyx_k_box_area), 0, 0, 1, 1},

-  {&__pyx_kp_s_box_overlaps_pyx, __pyx_k_box_overlaps_pyx, sizeof(__pyx_k_box_overlaps_pyx), 0, 0, 1, 0},

-  {&__pyx_n_s_boxes, __pyx_k_boxes, sizeof(__pyx_k_boxes), 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_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1},

-  {&__pyx_n_s_float, __pyx_k_float, sizeof(__pyx_k_float), 0, 0, 1, 1},

-  {&__pyx_n_s_ih, __pyx_k_ih, sizeof(__pyx_k_ih), 0, 0, 1, 1},

-  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},

-  {&__pyx_n_s_iw, __pyx_k_iw, sizeof(__pyx_k_iw), 0, 0, 1, 1},

-  {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1},

-  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},

-  {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1},

-  {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},

-  {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1},

-  {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1},

-  {&__pyx_kp_s_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 0, 1, 0},

-  {&__pyx_kp_s_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 0, 1, 0},

-  {&__pyx_n_s_overlaps, __pyx_k_overlaps, sizeof(__pyx_k_overlaps), 0, 0, 1, 1},

-  {&__pyx_n_s_query_boxes, __pyx_k_query_boxes, sizeof(__pyx_k_query_boxes), 0, 0, 1, 1},

-  {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},

-  {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},

-  {&__pyx_n_s_ua, __pyx_k_ua, sizeof(__pyx_k_ua), 0, 0, 1, 1},

-  {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1},

-  {0, 0, 0, 0, 0, 0, 0}

-};

-static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {

-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 33, __pyx_L1_error)

-  __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 884, __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);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":884

- *         __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, 884, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_tuple_);

-  __Pyx_GIVEREF(__pyx_tuple_);

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":890

- *         _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, 890, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_tuple__2);

-  __Pyx_GIVEREF(__pyx_tuple__2);

-

-  /* "box_overlaps.pyx":15

- * ctypedef np.float_t DTYPE_t

- * 

- * def bbox_overlaps(             # <<<<<<<<<<<<<<

- *         np.ndarray[DTYPE_t, ndim=2] boxes,

- *         np.ndarray[DTYPE_t, ndim=2] query_boxes):

- */

-  __pyx_tuple__3 = PyTuple_Pack(11, __pyx_n_s_boxes, __pyx_n_s_query_boxes, __pyx_n_s_N, __pyx_n_s_K, __pyx_n_s_overlaps, __pyx_n_s_iw, __pyx_n_s_ih, __pyx_n_s_box_area, __pyx_n_s_ua, __pyx_n_s_k, __pyx_n_s_n); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 15, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_tuple__3);

-  __Pyx_GIVEREF(__pyx_tuple__3);

-  __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(2, 0, 11, 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_box_overlaps_pyx, __pyx_n_s_bbox_overlaps, 15, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(0, 15, __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, 199, __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, 199, __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, 222, __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, 226, __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, 238, __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, 764, __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 initbbox(void) CYTHON_SMALL_CODE; /*proto*/

-__Pyx_PyMODINIT_FUNC initbbox(void)

-#else

-__Pyx_PyMODINIT_FUNC PyInit_bbox(void) CYTHON_SMALL_CODE; /*proto*/

-__Pyx_PyMODINIT_FUNC PyInit_bbox(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_bbox(PyObject *__pyx_pyinit_module)

-#endif

-#endif

-{

-  PyObject *__pyx_t_1 = NULL;

-  PyObject *__pyx_t_2 = NULL;

-  int __pyx_lineno = 0;

-  const char *__pyx_filename = NULL;

-  int __pyx_clineno = 0;

-  __Pyx_RefNannyDeclarations

-  #if CYTHON_PEP489_MULTI_PHASE_INIT

-  if (__pyx_m) {

-    if (__pyx_m == __pyx_pyinit_module) return 0;

-    PyErr_SetString(PyExc_RuntimeError, "Module 'bbox' 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_bbox(void)", 0);

-  if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error)

-  #ifdef __Pxy_PyFrame_Initialize_Offsets

-  __Pxy_PyFrame_Initialize_Offsets();

-  #endif

-  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)

-  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)

-  __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)

-  #ifdef __Pyx_CyFunction_USED

-  if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)

-  #endif

-  #ifdef __Pyx_FusedFunction_USED

-  if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)

-  #endif

-  #ifdef __Pyx_Coroutine_USED

-  if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)

-  #endif

-  #ifdef __Pyx_Generator_USED

-  if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)

-  #endif

-  #ifdef __Pyx_AsyncGen_USED

-  if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)

-  #endif

-  #ifdef __Pyx_StopAsyncIteration_USED

-  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)

-  #endif

-  /*--- Library function declarations ---*/

-  /*--- Threads initialization code ---*/

-  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS

-  PyEval_InitThreads();

-  #endif

-  /*--- Module creation code ---*/

-  #if CYTHON_PEP489_MULTI_PHASE_INIT

-  __pyx_m = __pyx_pyinit_module;

-  Py_INCREF(__pyx_m);

-  #else

-  #if PY_MAJOR_VERSION < 3

-  __pyx_m = Py_InitModule4("bbox", __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_bbox) {

-    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, "bbox")) {

-      if (unlikely(PyDict_SetItemString(modules, "bbox", __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

-

-  /* "box_overlaps.pyx":9

- * 

- * cimport cython

- * import numpy as np             # <<<<<<<<<<<<<<

- * cimport numpy as np

- * 

- */

-  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_1);

-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 9, __pyx_L1_error)

-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

-

-  /* "box_overlaps.pyx":12

- * cimport numpy as np

- * 

- * DTYPE = np.float             # <<<<<<<<<<<<<<

- * ctypedef np.float_t DTYPE_t

- * 

- */

-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_1);

-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_2);

-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DTYPE, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error)

-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

-

-  /* "box_overlaps.pyx":15

- * ctypedef np.float_t DTYPE_t

- * 

- * def bbox_overlaps(             # <<<<<<<<<<<<<<

- *         np.ndarray[DTYPE_t, ndim=2] boxes,

- *         np.ndarray[DTYPE_t, ndim=2] query_boxes):

- */

-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4bbox_1bbox_overlaps, NULL, __pyx_n_s_bbox); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_2);

-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bbox_overlaps, __pyx_t_2) < 0) __PYX_ERR(0, 15, __pyx_L1_error)

-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

-

-  /* "box_overlaps.pyx":1

- * # --------------------------------------------------------             # <<<<<<<<<<<<<<

- * # Fast R-CNN

- * # Copyright (c) 2015 Microsoft

- */

-  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)

-  __Pyx_GOTREF(__pyx_t_2);

-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)

-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

-

-  /* "../../../../root/anaconda3/envs/DSFD/lib/python3.7/site-packages/numpy/__init__.pxd":892

- *         raise ImportError("numpy.core.umath failed to import")

- * 

- * cdef inline int import_ufunc() except -1:             # <<<<<<<<<<<<<<

- *     try:

- *         _import_umath()

- */

-

-  /*--- Wrapped vars code ---*/

-

-  goto __pyx_L0;

-  __pyx_L1_error:;

-  __Pyx_XDECREF(__pyx_t_1);

-  __Pyx_XDECREF(__pyx_t_2);

-  if (__pyx_m) {

-    if (__pyx_d) {

-      __Pyx_AddTraceback("init bbox", __pyx_clineno, __pyx_lineno, __pyx_filename);

-    }

-    Py_CLEAR(__pyx_m);

-  } else if (!PyErr_Occurred()) {

-    PyErr_SetString(PyExc_ImportError, "init bbox");

-  }

-  __pyx_L0:;

-  __Pyx_RefNannyFinishContext();

-  #if CYTHON_PEP489_MULTI_PHASE_INIT

-  return (__pyx_m != NULL) ? 0 : -1;

-  #elif PY_MAJOR_VERSION >= 3

-  return __pyx_m;

-  #else

-  return;

-  #endif

-}

-

-/* --- Runtime support code --- */

-/* Refnanny */

-#if CYTHON_REFNANNY

-static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {

-    PyObject *m = NULL, *p = NULL;

-    void *r = NULL;

-    m = PyImport_ImportModule(modname);

-    if (!m) goto end;

-    p = PyObject_GetAttrString(m, "RefNannyAPI");

-    if (!p) goto end;

-    r = PyLong_AsVoidPtr(p);

-end:

-    Py_XDECREF(p);

-    Py_XDECREF(m);

-    return (__Pyx_RefNannyAPIStruct *)r;

-}

-#endif

-

-/* PyObjectGetAttrStr */

-#if CYTHON_USE_TYPE_SLOTS

-static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {

-    PyTypeObject* tp = Py_TYPE(obj);

-    if (likely(tp->tp_getattro))

-        return tp->tp_getattro(obj, attr_name);

-#if PY_MAJOR_VERSION < 3

-    if (likely(tp->tp_getattr))

-        return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));

-#endif

-    return PyObject_GetAttr(obj, attr_name);

-}

-#endif

-

-/* GetBuiltinName */

-static PyObject *__Pyx_GetBuiltinName(PyObject *name) {

-    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);

-    if (unlikely(!result)) {

-        PyErr_Format(PyExc_NameError,

-#if PY_MAJOR_VERSION >= 3

-            "name '%U' is not defined", name);

-#else

-            "name '%.200s' is not defined", PyString_AS_STRING(name));

-#endif

-    }

-    return result;

-}

-

-/* RaiseArgTupleInvalid */

-static void __Pyx_RaiseArgtupleInvalid(

-    const char* func_name,

-    int exact,

-    Py_ssize_t num_min,

-    Py_ssize_t num_max,

-    Py_ssize_t num_found)

-{

-    Py_ssize_t num_expected;

-    const char *more_or_less;

-    if (num_found < num_min) {

-        num_expected = num_min;

-        more_or_less = "at least";

-    } else {

-        num_expected = num_max;

-        more_or_less = "at most";

-    }

-    if (exact) {

-        more_or_less = "exactly";

-    }

-    PyErr_Format(PyExc_TypeError,

-                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",

-                 func_name, more_or_less, num_expected,

-                 (num_expected == 1) ? "" : "s", num_found);

-}

-

-/* RaiseDoubleKeywords */

-static void __Pyx_RaiseDoubleKeywordsError(

-    const char* func_name,

-    PyObject* kw_name)

-{

-    PyErr_Format(PyExc_TypeError,

-        #if PY_MAJOR_VERSION >= 3

-        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);

-        #else

-        "%s() got multiple values for keyword argument '%s'", func_name,

-        PyString_AsString(kw_name));

-        #endif

-}

-

-/* ParseKeywords */

-static int __Pyx_ParseOptionalKeywords(

-    PyObject *kwds,

-    PyObject **argnames[],

-    PyObject *kwds2,

-    PyObject *values[],

-    Py_ssize_t num_pos_args,

-    const char* function_name)

-{

-    PyObject *key = 0, *value = 0;

-    Py_ssize_t pos = 0;

-    PyObject*** name;

-    PyObject*** first_kw_arg = argnames + num_pos_args;

-    while (PyDict_Next(kwds, &pos, &key, &value)) {

-        name = first_kw_arg;

-        while (*name && (**name != key)) name++;

-        if (*name) {

-            values[name-argnames] = value;

-            continue;

-        }

-        name = first_kw_arg;

-        #if PY_MAJOR_VERSION < 3

-        if (likely(PyString_Check(key))) {

-            while (*name) {

-                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))

-                        && _PyString_Eq(**name, key)) {

-                    values[name-argnames] = value;

-                    break;

-                }

-                name++;

-            }

-            if (*name) continue;

-            else {

-                PyObject*** argname = argnames;

-                while (argname != first_kw_arg) {

-                    if ((**argname == key) || (

-                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))

-                             && _PyString_Eq(**argname, key))) {

-                        goto arg_passed_twice;

-                    }

-                    argname++;

-                }

-            }

-        } else

-        #endif

-        if (likely(PyUnicode_Check(key))) {

-            while (*name) {

-                int cmp = (**name == key) ? 0 :

-                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3

-                    (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 :

-                #endif

-                    PyUnicode_Compare(**name, key);

-                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;

-                if (cmp == 0) {

-                    values[name-argnames] = value;

-                    break;

-                }

-                name++;

-            }

-            if (*name) continue;

-            else {

-                PyObject*** argname = argnames;

-                while (argname != first_kw_arg) {

-                    int cmp = (**argname == key) ? 0 :

-                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3

-                        (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 :

-                    #endif

-                        PyUnicode_Compare(**argname, key);

-                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;

-                    if (cmp == 0) goto arg_passed_twice;

-                    argname++;

-                }

-            }

-        } else

-            goto invalid_keyword_type;

-        if (kwds2) {

-            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;

-        } else {

-            goto invalid_keyword;

-        }

-    }

-    return 0;

-arg_passed_twice:

-    __Pyx_RaiseDoubleKeywordsError(function_name, key);

-    goto bad;

-invalid_keyword_type:

-    PyErr_Format(PyExc_TypeError,

-        "%.200s() keywords must be strings", function_name);

-    goto bad;

-invalid_keyword:

-    PyErr_Format(PyExc_TypeError,

-    #if PY_MAJOR_VERSION < 3

-        "%.200s() got an unexpected keyword argument '%.200s'",

-        function_name, PyString_AsString(key));

-    #else

-        "%s() got an unexpected keyword argument '%U'",

-        function_name, key);

-    #endif

-bad:

-    return -1;

-}

-

-/* ArgTypeTest */

-static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact)

-{

-    if (unlikely(!type)) {

-        PyErr_SetString(PyExc_SystemError, "Missing type object");

-        return 0;

-    }

-    else if (exact) {

-        #if PY_MAJOR_VERSION == 2

-        if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;

-        #endif

-    }

-    else {

-        if (likely(__Pyx_TypeCheck(obj, type))) return 1;

-    }

-    PyErr_Format(PyExc_TypeError,

-        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",

-        name, type->tp_name, Py_TYPE(obj)->tp_name);

-    return 0;

-}

-

-/* 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;

-}

-

-/* PyDictVersioning */

-  #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS

-static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {

-    PyObject *dict = Py_TYPE(obj)->tp_dict;

-    return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0;

-}

-static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) {

-    PyObject **dictptr = NULL;

-    Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset;

-    if (offset) {

-#if CYTHON_COMPILING_IN_CPYTHON

-        dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj);

-#else

-        dictptr = _PyObject_GetDictPtr(obj);

-#endif

-    }

-    return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0;

-}

-static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) {

-    PyObject *dict = Py_TYPE(obj)->tp_dict;

-    if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict)))

-        return 0;

-    return obj_dict_version == __Pyx_get_object_dict_version(obj);

-}

-#endif

-

-/* GetModuleGlobalName */

-  #if CYTHON_USE_DICT_VERSIONS

-static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value)

-#else

-static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)

-#endif

-{

-    PyObject *result;

-#if !CYTHON_AVOID_BORROWED_REFS

-#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1

-    result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash);

-    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)

-    if (likely(result)) {

-        return __Pyx_NewRef(result);

-    } else if (unlikely(PyErr_Occurred())) {

-        return NULL;

-    }

-#else

-    result = PyDict_GetItem(__pyx_d, name);

-    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)

-    if (likely(result)) {

-        return __Pyx_NewRef(result);

-    }

-#endif

-#else

-    result = PyObject_GetItem(__pyx_d, name);

-    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)

-    if (likely(result)) {

-        return __Pyx_NewRef(result);

-    }

-    PyErr_Clear();

-#endif

-    return __Pyx_GetBuiltinName(name);

-}

-

-/* PyObjectCall */

-  #if CYTHON_COMPILING_IN_CPYTHON

-static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {

-    PyObject *result;

-    ternaryfunc call = Py_TYPE(func)->tp_call;

-    if (unlikely(!call))

-        return PyObject_Call(func, arg, kw);

-    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))

-        return NULL;

-    result = (*call)(func, arg, kw);

-    Py_LeaveRecursiveCall();

-    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {

-        PyErr_SetString(

-            PyExc_SystemError,

-            "NULL result without error in PyObject_Call");

-    }

-    return result;

-}

-#endif

-

-/* ExtTypeTest */

-  static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {

-    if (unlikely(!type)) {

-        PyErr_SetString(PyExc_SystemError, "Missing type object");

-        return 0;

-    }

-    if (likely(__Pyx_TypeCheck(obj, type)))

-        return 1;

-    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",

-                 Py_TYPE(obj)->tp_name, type->tp_name);

-    return 0;

-}

-

-/* BufferIndexError */

-  static void __Pyx_RaiseBufferIndexError(int axis) {

-  PyErr_Format(PyExc_IndexError,

-     "Out of bounds on buffer access (axis %d)", axis);

-}

-

-/* PyErrFetchRestore */

-  #if CYTHON_FAST_THREAD_STATE

-static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {

-    PyObject *tmp_type, *tmp_value, *tmp_tb;

-    tmp_type = tstate->curexc_type;

-    tmp_value = tstate->curexc_value;

-    tmp_tb = tstate->curexc_traceback;

-    tstate->curexc_type = type;

-    tstate->curexc_value = value;

-    tstate->curexc_traceback = tb;

-    Py_XDECREF(tmp_type);

-    Py_XDECREF(tmp_value);

-    Py_XDECREF(tmp_tb);

-}

-static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {

-    *type = tstate->curexc_type;

-    *value = tstate->curexc_value;

-    *tb = tstate->curexc_traceback;

-    tstate->curexc_type = 0;

-    tstate->curexc_value = 0;

-    tstate->curexc_traceback = 0;

-}

-#endif

-

-/* 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; i<n; i++) {

-        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;

-    }

-#endif

-    for (i=0; i<n; i++) {

-        if (__Pyx_PyErr_GivenExceptionMatches(exc_type, PyTuple_GET_ITEM(tuple, i))) return 1;

-    }

-    return 0;

-}

-static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) {

-    PyObject *exc_type = tstate->curexc_type;

-    if (exc_type == err) return 1;

-    if (unlikely(!exc_type)) return 0;

-    if (unlikely(PyTuple_Check(err)))

-        return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err);

-    return __Pyx_PyErr_GivenExceptionMatches(exc_type, err);

-}

-#endif

-

-/* GetException */

-  #if CYTHON_FAST_THREAD_STATE

-static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb)

-#else

-static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)

-#endif

-{

-    PyObject *local_type, *local_value, *local_tb;

-#if CYTHON_FAST_THREAD_STATE

-    PyObject *tmp_type, *tmp_value, *tmp_tb;

-    local_type = tstate->curexc_type;

-    local_value = tstate->curexc_value;

-    local_tb = tstate->curexc_traceback;

-    tstate->curexc_type = 0;

-    tstate->curexc_value = 0;

-    tstate->curexc_traceback = 0;

-#else

-    PyErr_Fetch(&local_type, &local_value, &local_tb);

-#endif

-    PyErr_NormalizeException(&local_type, &local_value, &local_tb);

-#if CYTHON_FAST_THREAD_STATE

-    if (unlikely(tstate->curexc_type))

-#else

-    if (unlikely(PyErr_Occurred()))

-#endif

-        goto bad;

-    #if PY_MAJOR_VERSION >= 3

-    if (local_tb) {

-        if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))

-            goto bad;

-    }

-    #endif

-    Py_XINCREF(local_tb);

-    Py_XINCREF(local_type);

-    Py_XINCREF(local_value);

-    *type = local_type;

-    *value = local_value;

-    *tb = local_tb;

-#if CYTHON_FAST_THREAD_STATE

-    #if CYTHON_USE_EXC_INFO_STACK

-    {

-        _PyErr_StackItem *exc_info = tstate->exc_info;

-        tmp_type = exc_info->exc_type;

-        tmp_value = exc_info->exc_value;

-        tmp_tb = exc_info->exc_traceback;

-        exc_info->exc_type = local_type;

-        exc_info->exc_value = local_value;

-        exc_info->exc_traceback = local_tb;

-    }

-    #else

-    tmp_type = tstate->exc_type;

-    tmp_value = tstate->exc_value;

-    tmp_tb = tstate->exc_traceback;

-    tstate->exc_type = local_type;

-    tstate->exc_value = local_value;

-    tstate->exc_traceback = local_tb;

-    #endif

-    Py_XDECREF(tmp_type);

-    Py_XDECREF(tmp_value);

-    Py_XDECREF(tmp_tb);

-#else

-    PyErr_SetExcInfo(local_type, local_value, local_tb);

-#endif

-    return 0;

-bad:

-    *type = 0;

-    *value = 0;

-    *tb = 0;

-    Py_XDECREF(local_type);

-    Py_XDECREF(local_value);

-    Py_XDECREF(local_tb);

-    return -1;

-}

-

-/* RaiseException */

-  #if PY_MAJOR_VERSION < 3

-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,

-                        CYTHON_UNUSED PyObject *cause) {

-    __Pyx_PyThreadState_declare

-    Py_XINCREF(type);

-    if (!value || value == Py_None)

-        value = NULL;

-    else

-        Py_INCREF(value);

-    if (!tb || tb == Py_None)

-        tb = NULL;

-    else {

-        Py_INCREF(tb);

-        if (!PyTraceBack_Check(tb)) {

-            PyErr_SetString(PyExc_TypeError,

-                "raise: arg 3 must be a traceback or None");

-            goto raise_error;

-        }

-    }

-    if (PyType_Check(type)) {

-#if CYTHON_COMPILING_IN_PYPY

-        if (!value) {

-            Py_INCREF(Py_None);

-            value = Py_None;

-        }

-#endif

-        PyErr_NormalizeException(&type, &value, &tb);

-    } else {

-        if (value) {

-            PyErr_SetString(PyExc_TypeError,

-                "instance exception may not have a separate value");

-            goto raise_error;

-        }

-        value = type;

-        type = (PyObject*) Py_TYPE(type);

-        Py_INCREF(type);

-        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {

-            PyErr_SetString(PyExc_TypeError,

-                "raise: exception class must be a subclass of BaseException");

-            goto raise_error;

-        }

-    }

-    __Pyx_PyThreadState_assign

-    __Pyx_ErrRestore(type, value, tb);

-    return;

-raise_error:

-    Py_XDECREF(value);

-    Py_XDECREF(type);

-    Py_XDECREF(tb);

-    return;

-}

-#else

-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {

-    PyObject* owned_instance = NULL;

-    if (tb == Py_None) {

-        tb = 0;

-    } else if (tb && !PyTraceBack_Check(tb)) {

-        PyErr_SetString(PyExc_TypeError,

-            "raise: arg 3 must be a traceback or None");

-        goto bad;

-    }

-    if (value == Py_None)

-        value = 0;

-    if (PyExceptionInstance_Check(type)) {

-        if (value) {

-            PyErr_SetString(PyExc_TypeError,

-                "instance exception may not have a separate value");

-            goto bad;

-        }

-        value = type;

-        type = (PyObject*) Py_TYPE(value);

-    } else if (PyExceptionClass_Check(type)) {

-        PyObject *instance_class = NULL;

-        if (value && PyExceptionInstance_Check(value)) {

-            instance_class = (PyObject*) Py_TYPE(value);

-            if (instance_class != type) {

-                int is_subclass = PyObject_IsSubclass(instance_class, type);

-                if (!is_subclass) {

-                    instance_class = NULL;

-                } else if (unlikely(is_subclass == -1)) {

-                    goto bad;

-                } else {

-                    type = instance_class;

-                }

-            }

-        }

-        if (!instance_class) {

-            PyObject *args;

-            if (!value)

-                args = PyTuple_New(0);

-            else if (PyTuple_Check(value)) {

-                Py_INCREF(value);

-                args = value;

-            } else

-                args = PyTuple_Pack(1, value);

-            if (!args)

-                goto bad;

-            owned_instance = PyObject_Call(type, args, NULL);

-            Py_DECREF(args);

-            if (!owned_instance)

-                goto bad;

-            value = owned_instance;

-            if (!PyExceptionInstance_Check(value)) {

-                PyErr_Format(PyExc_TypeError,

-                             "calling %R should have returned an instance of "

-                             "BaseException, not %R",

-                             type, Py_TYPE(value));

-                goto bad;

-            }

-        }

-    } else {

-        PyErr_SetString(PyExc_TypeError,

-            "raise: exception class must be a subclass of BaseException");

-        goto bad;

-    }

-    if (cause) {

-        PyObject *fixed_cause;

-        if (cause == Py_None) {

-            fixed_cause = NULL;

-        } else if (PyExceptionClass_Check(cause)) {

-            fixed_cause = PyObject_CallObject(cause, NULL);

-            if (fixed_cause == NULL)

-                goto bad;

-        } else if (PyExceptionInstance_Check(cause)) {

-            fixed_cause = cause;

-            Py_INCREF(fixed_cause);

-        } else {

-            PyErr_SetString(PyExc_TypeError,

-                            "exception causes must derive from "

-                            "BaseException");

-            goto bad;

-        }

-        PyException_SetCause(value, fixed_cause);

-    }

-    PyErr_SetObject(type, value);

-    if (tb) {

-#if CYTHON_COMPILING_IN_PYPY

-        PyObject *tmp_type, *tmp_value, *tmp_tb;

-        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);

-        Py_INCREF(tb);

-        PyErr_Restore(tmp_type, tmp_value, tb);

-        Py_XDECREF(tmp_tb);

-#else

-        PyThreadState *tstate = __Pyx_PyThreadState_Current;

-        PyObject* tmp_tb = tstate->curexc_traceback;

-        if (tb != tmp_tb) {

-            Py_INCREF(tb);

-            tstate->curexc_traceback = tb;

-            Py_XDECREF(tmp_tb);

-        }

-#endif

-    }

-bad:

-    Py_XDECREF(owned_instance);

-    return;

-}

-#endif

-

-/* TypeImport */

-  #ifndef __PYX_HAVE_RT_ImportType

-#define __PYX_HAVE_RT_ImportType

-static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name,

-    size_t size, enum __Pyx_ImportType_CheckSize check_size)

-{

-    PyObject *result = 0;

-    char warning[200];

-    Py_ssize_t basicsize;

-#ifdef Py_LIMITED_API

-    PyObject *py_basicsize;

-#endif

-    result = PyObject_GetAttrString(module, class_name);

-    if (!result)

-        goto bad;

-    if (!PyType_Check(result)) {

-        PyErr_Format(PyExc_TypeError,

-            "%.200s.%.200s is not a type object",

-            module_name, class_name);

-        goto bad;

-    }

-#ifndef Py_LIMITED_API

-    basicsize = ((PyTypeObject *)result)->tp_basicsize;

-#else

-    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");

-    if (!py_basicsize)

-        goto bad;

-    basicsize = PyLong_AsSsize_t(py_basicsize);

-    Py_DECREF(py_basicsize);

-    py_basicsize = 0;

-    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())

-        goto bad;

-#endif

-    if ((size_t)basicsize < size) {

-        PyErr_Format(PyExc_ValueError,

-            "%.200s.%.200s size changed, may indicate binary incompatibility. "

-            "Expected %zd from C header, got %zd from PyObject",

-            module_name, class_name, size, basicsize);

-        goto bad;

-    }

-    if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) {

-        PyErr_Format(PyExc_ValueError,

-            "%.200s.%.200s size changed, may indicate binary incompatibility. "

-            "Expected %zd from C header, got %zd from PyObject",

-            module_name, class_name, size, basicsize);

-        goto bad;

-    }

-    else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) {

-        PyOS_snprintf(warning, sizeof(warning),

-            "%s.%s size changed, may indicate binary incompatibility. "

-            "Expected %zd from C header, got %zd from PyObject",

-            module_name, class_name, size, basicsize);

-        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;

-    }

-    return (PyTypeObject *)result;

-bad:

-    Py_XDECREF(result);

-    return NULL;

-}

-#endif

-

-/* Import */

-  static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {

-    PyObject *empty_list = 0;

-    PyObject *module = 0;

-    PyObject *global_dict = 0;

-    PyObject *empty_dict = 0;

-    PyObject *list;

-    #if PY_MAJOR_VERSION < 3

-    PyObject *py_import;

-    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);

-    if (!py_import)

-        goto bad;

-    #endif

-    if (from_list)

-        list = from_list;

-    else {

-        empty_list = PyList_New(0);

-        if (!empty_list)

-            goto bad;

-        list = empty_list;

-    }

-    global_dict = PyModule_GetDict(__pyx_m);

-    if (!global_dict)

-        goto bad;

-    empty_dict = PyDict_New();

-    if (!empty_dict)

-        goto bad;

-    {

-        #if PY_MAJOR_VERSION >= 3

-        if (level == -1) {

-            if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) {

-                module = PyImport_ImportModuleLevelObject(

-                    name, global_dict, empty_dict, list, 1);

-                if (!module) {

-                    if (!PyErr_ExceptionMatches(PyExc_ImportError))

-                        goto bad;

-                    PyErr_Clear();

-                }

-            }

-            level = 0;

-        }

-        #endif

-        if (!module) {

-            #if PY_MAJOR_VERSION < 3

-            PyObject *py_level = PyInt_FromLong(level);

-            if (!py_level)

-                goto bad;

-            module = PyObject_CallFunctionObjArgs(py_import,

-                name, global_dict, empty_dict, list, py_level, (PyObject *)NULL);

-            Py_DECREF(py_level);

-            #else

-            module = PyImport_ImportModuleLevelObject(

-                name, global_dict, empty_dict, list, level);

-            #endif

-        }

-    }

-bad:

-    #if PY_MAJOR_VERSION < 3

-    Py_XDECREF(py_import);

-    #endif

-    Py_XDECREF(empty_list);

-    Py_XDECREF(empty_dict);

-    return module;

-}

-

-/* 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

-

-/* CIntToPy */

-  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value) {

-#ifdef __Pyx_HAS_GCC_DIAGNOSTIC

-#pragma GCC diagnostic push

-#pragma GCC diagnostic ignored "-Wconversion"

-#endif

-    const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned int) 0;

-#ifdef __Pyx_HAS_GCC_DIAGNOSTIC

-#pragma GCC diagnostic pop

-#endif

-    const int is_unsigned = neg_one > const_zero;

-    if (is_unsigned) {

-        if (sizeof(unsigned int) < sizeof(long)) {

-            return PyInt_FromLong((long) value);

-        } else if (sizeof(unsigned int) <= sizeof(unsigned long)) {

-            return PyLong_FromUnsignedLong((unsigned long) value);

-#ifdef HAVE_LONG_LONG

-        } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) {

-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);

-#endif

-        }

-    } else {

-        if (sizeof(unsigned int) <= sizeof(long)) {

-            return PyInt_FromLong((long) value);

-#ifdef HAVE_LONG_LONG

-        } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) {

-            return PyLong_FromLongLong((PY_LONG_LONG) value);

-#endif

-        }

-    }

-    {

-        int one = 1; int little = (int)*(unsigned char *)&one;

-        unsigned char *bytes = (unsigned char *)&value;

-        return _PyLong_FromByteArray(bytes, sizeof(unsigned int),

-                                     little, !is_unsigned);

-    }

-}

-

-/* CIntFromPy */

-  static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) {

-#ifdef __Pyx_HAS_GCC_DIAGNOSTIC

-#pragma GCC diagnostic push

-#pragma GCC diagnostic ignored "-Wconversion"

-#endif

-    const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned 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(unsigned int) < sizeof(long)) {

-            __PYX_VERIFY_RETURN_INT(unsigned int, long, PyInt_AS_LONG(x))

-        } else {

-            long val = PyInt_AS_LONG(x);

-            if (is_unsigned && unlikely(val < 0)) {

-                goto raise_neg_overflow;

-            }

-            return (unsigned int) val;

-        }

-    } else

-#endif

-    if (likely(PyLong_Check(x))) {

-        if (is_unsigned) {

-#if CYTHON_USE_PYLONG_INTERNALS

-            const digit* digits = ((PyLongObject*)x)->ob_digit;

-            switch (Py_SIZE(x)) {

-                case  0: return (unsigned int) 0;

-                case  1: __PYX_VERIFY_RETURN_INT(unsigned int, digit, digits[0])

-                case 2:

-                    if (8 * sizeof(unsigned int) > 1 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(unsigned int) >= 2 * PyLong_SHIFT) {

-                            return (unsigned int) (((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]));

-                        }

-                    }

-                    break;

-                case 3:

-                    if (8 * sizeof(unsigned int) > 2 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(unsigned int) >= 3 * PyLong_SHIFT) {

-                            return (unsigned int) (((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]));

-                        }

-                    }

-                    break;

-                case 4:

-                    if (8 * sizeof(unsigned int) > 3 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(unsigned int) >= 4 * PyLong_SHIFT) {

-                            return (unsigned int) (((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]));

-                        }

-                    }

-                    break;

-            }

-#endif

-#if CYTHON_COMPILING_IN_CPYTHON

-            if (unlikely(Py_SIZE(x) < 0)) {

-                goto raise_neg_overflow;

-            }

-#else

-            {

-                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);

-                if (unlikely(result < 0))

-                    return (unsigned int) -1;

-                if (unlikely(result == 1))

-                    goto raise_neg_overflow;

-            }

-#endif

-            if (sizeof(unsigned int) <= sizeof(unsigned long)) {

-                __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned long, PyLong_AsUnsignedLong(x))

-#ifdef HAVE_LONG_LONG

-            } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) {

-                __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))

-#endif

-            }

-        } else {

-#if CYTHON_USE_PYLONG_INTERNALS

-            const digit* digits = ((PyLongObject*)x)->ob_digit;

-            switch (Py_SIZE(x)) {

-                case  0: return (unsigned int) 0;

-                case -1: __PYX_VERIFY_RETURN_INT(unsigned int, sdigit, (sdigit) (-(sdigit)digits[0]))

-                case  1: __PYX_VERIFY_RETURN_INT(unsigned int,  digit, +digits[0])

-                case -2:

-                    if (8 * sizeof(unsigned int) - 1 > 1 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) {

-                            return (unsigned int) (((unsigned int)-1)*(((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));

-                        }

-                    }

-                    break;

-                case 2:

-                    if (8 * sizeof(unsigned int) > 1 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) {

-                            return (unsigned int) ((((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));

-                        }

-                    }

-                    break;

-                case -3:

-                    if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) {

-                            return (unsigned int) (((unsigned int)-1)*(((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));

-                        }

-                    }

-                    break;

-                case 3:

-                    if (8 * sizeof(unsigned int) > 2 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) {

-                            return (unsigned int) ((((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));

-                        }

-                    }

-                    break;

-                case -4:

-                    if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT) {

-                            return (unsigned int) (((unsigned int)-1)*(((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));

-                        }

-                    }

-                    break;

-                case 4:

-                    if (8 * sizeof(unsigned int) > 3 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT) {

-                            return (unsigned int) ((((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));

-                        }

-                    }

-                    break;

-            }

-#endif

-            if (sizeof(unsigned int) <= sizeof(long)) {

-                __PYX_VERIFY_RETURN_INT_EXC(unsigned int, long, PyLong_AsLong(x))

-#ifdef HAVE_LONG_LONG

-            } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) {

-                __PYX_VERIFY_RETURN_INT_EXC(unsigned int, PY_LONG_LONG, PyLong_AsLongLong(x))

-#endif

-            }

-        }

-        {

-#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)

-            PyErr_SetString(PyExc_RuntimeError,

-                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");

-#else

-            unsigned int val;

-            PyObject *v = __Pyx_PyNumber_IntOrLong(x);

- #if PY_MAJOR_VERSION < 3

-            if (likely(v) && !PyLong_Check(v)) {

-                PyObject *tmp = v;

-                v = PyNumber_Long(tmp);

-                Py_DECREF(tmp);

-            }

- #endif

-            if (likely(v)) {

-                int one = 1; int is_little = (int)*(unsigned char *)&one;

-                unsigned char *bytes = (unsigned char *)&val;

-                int ret = _PyLong_AsByteArray((PyLongObject *)v,

-                                              bytes, sizeof(val),

-                                              is_little, !is_unsigned);

-                Py_DECREF(v);

-                if (likely(!ret))

-                    return val;

-            }

-#endif

-            return (unsigned int) -1;

-        }

-    } else {

-        unsigned int val;

-        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);

-        if (!tmp) return (unsigned int) -1;

-        val = __Pyx_PyInt_As_unsigned_int(tmp);

-        Py_DECREF(tmp);

-        return val;

-    }

-raise_overflow:

-    PyErr_SetString(PyExc_OverflowError,

-        "value too large to convert to unsigned int");

-    return (unsigned int) -1;

-raise_neg_overflow:

-    PyErr_SetString(PyExc_OverflowError,

-        "can't convert negative value to unsigned int");

-    return (unsigned int) -1;

-}

-

-/* 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;

-}

-

-/* CIntFromPy */

-  static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {

-#ifdef __Pyx_HAS_GCC_DIAGNOSTIC

-#pragma GCC diagnostic push

-#pragma GCC diagnostic ignored "-Wconversion"

-#endif

-    const int neg_one = (int) -1, const_zero = (int) 0;

-#ifdef __Pyx_HAS_GCC_DIAGNOSTIC

-#pragma GCC diagnostic pop

-#endif

-    const int is_unsigned = neg_one > const_zero;

-#if PY_MAJOR_VERSION < 3

-    if (likely(PyInt_Check(x))) {

-        if (sizeof(int) < sizeof(long)) {

-            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))

-        } else {

-            long val = PyInt_AS_LONG(x);

-            if (is_unsigned && unlikely(val < 0)) {

-                goto raise_neg_overflow;

-            }

-            return (int) val;

-        }

-    } else

-#endif

-    if (likely(PyLong_Check(x))) {

-        if (is_unsigned) {

-#if CYTHON_USE_PYLONG_INTERNALS

-            const digit* digits = ((PyLongObject*)x)->ob_digit;

-            switch (Py_SIZE(x)) {

-                case  0: return (int) 0;

-                case  1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0])

-                case 2:

-                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) {

-                            return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));

-                        }

-                    }

-                    break;

-                case 3:

-                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) {

-                            return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));

-                        }

-                    }

-                    break;

-                case 4:

-                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) {

-                            return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));

-                        }

-                    }

-                    break;

-            }

-#endif

-#if CYTHON_COMPILING_IN_CPYTHON

-            if (unlikely(Py_SIZE(x) < 0)) {

-                goto raise_neg_overflow;

-            }

-#else

-            {

-                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);

-                if (unlikely(result < 0))

-                    return (int) -1;

-                if (unlikely(result == 1))

-                    goto raise_neg_overflow;

-            }

-#endif

-            if (sizeof(int) <= sizeof(unsigned long)) {

-                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))

-#ifdef HAVE_LONG_LONG

-            } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {

-                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))

-#endif

-            }

-        } else {

-#if CYTHON_USE_PYLONG_INTERNALS

-            const digit* digits = ((PyLongObject*)x)->ob_digit;

-            switch (Py_SIZE(x)) {

-                case  0: return (int) 0;

-                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))

-                case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +digits[0])

-                case -2:

-                    if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {

-                            return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));

-                        }

-                    }

-                    break;

-                case 2:

-                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {

-                            return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));

-                        }

-                    }

-                    break;

-                case -3:

-                    if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {

-                            return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));

-                        }

-                    }

-                    break;

-                case 3:

-                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {

-                            return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));

-                        }

-                    }

-                    break;

-                case -4:

-                    if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {

-                            return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));

-                        }

-                    }

-                    break;

-                case 4:

-                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {

-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {

-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))

-                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {

-                            return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));

-                        }

-                    }

-                    break;

-            }

-#endif

-            if (sizeof(int) <= sizeof(long)) {

-                __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))

-#ifdef HAVE_LONG_LONG

-            } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {

-                __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))

-#endif

-            }

-        }

-        {

-#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)

-            PyErr_SetString(PyExc_RuntimeError,

-                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");

-#else

-            int val;

-            PyObject *v = __Pyx_PyNumber_IntOrLong(x);

- #if PY_MAJOR_VERSION < 3

-            if (likely(v) && !PyLong_Check(v)) {

-                PyObject *tmp = v;

-                v = PyNumber_Long(tmp);

-                Py_DECREF(tmp);

-            }

- #endif

-            if (likely(v)) {

-                int one = 1; int is_little = (int)*(unsigned char *)&one;

-                unsigned char *bytes = (unsigned char *)&val;

-                int ret = _PyLong_AsByteArray((PyLongObject *)v,

-                                              bytes, sizeof(val),

-                                              is_little, !is_unsigned);

-                Py_DECREF(v);

-                if (likely(!ret))

-                    return val;

-            }

-#endif

-            return (int) -1;

-        }

-    } else {

-        int val;

-        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);

-        if (!tmp) return (int) -1;

-        val = __Pyx_PyInt_As_int(tmp);

-        Py_DECREF(tmp);

-        return val;

-    }

-raise_overflow:

-    PyErr_SetString(PyExc_OverflowError,

-        "value too large to convert to int");

-    return (int) -1;

-raise_neg_overflow:

-    PyErr_SetString(PyExc_OverflowError,

-        "can't convert negative value to int");

-    return (int) -1;

-}

-

-/* FastTypeChecks */

-  #if CYTHON_COMPILING_IN_CPYTHON

-static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {

-    while (a) {

-        a = a->tp_base;

-        if (a == b)

-            return 1;

-    }

-    return b == &PyBaseObject_Type;

-}

-static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {

-    PyObject *mro;

-    if (a == b) return 1;

-    mro = a->tp_mro;

-    if (likely(mro)) {

-        Py_ssize_t i, n;

-        n = PyTuple_GET_SIZE(mro);

-        for (i = 0; i < n; i++) {

-            if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)

-                return 1;

-        }

-        return 0;

-    }

-    return __Pyx_InBases(a, b);

-}

-#if PY_MAJOR_VERSION == 2

-static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) {

-    PyObject *exception, *value, *tb;

-    int res;

-    __Pyx_PyThreadState_declare

-    __Pyx_PyThreadState_assign

-    __Pyx_ErrFetch(&exception, &value, &tb);

-    res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0;

-    if (unlikely(res == -1)) {

-        PyErr_WriteUnraisable(err);

-        res = 0;

-    }

-    if (!res) {

-        res = PyObject_IsSubclass(err, exc_type2);

-        if (unlikely(res == -1)) {

-            PyErr_WriteUnraisable(err);

-            res = 0;

-        }

-    }

-    __Pyx_ErrRestore(exception, value, tb);

-    return res;

-}

-#else

-static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {

-    int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0;

-    if (!res) {

-        res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);

-    }

-    return res;

-}

-#endif

-static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {

-    Py_ssize_t i, n;

-    assert(PyExceptionClass_Check(exc_type));

-    n = PyTuple_GET_SIZE(tuple);

-#if PY_MAJOR_VERSION >= 3

-    for (i=0; i<n; i++) {

-        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;

-    }

-#endif

-    for (i=0; i<n; i++) {

-        PyObject *t = PyTuple_GET_ITEM(tuple, i);

-        #if PY_MAJOR_VERSION < 3

-        if (likely(exc_type == t)) return 1;

-        #endif

-        if (likely(PyExceptionClass_Check(t))) {

-            if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1;

-        } else {

-        }

-    }

-    return 0;

-}

-static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {

-    if (likely(err == exc_type)) return 1;

-    if (likely(PyExceptionClass_Check(err))) {

-        if (likely(PyExceptionClass_Check(exc_type))) {

-            return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);

-        } else if (likely(PyTuple_Check(exc_type))) {

-            return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type);

-        } else {

-        }

-    }

-    return PyErr_GivenExceptionMatches(err, exc_type);

-}

-static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {

-    assert(PyExceptionClass_Check(exc_type1));

-    assert(PyExceptionClass_Check(exc_type2));

-    if (likely(err == exc_type1 || err == exc_type2)) return 1;

-    if (likely(PyExceptionClass_Check(err))) {

-        return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);

-    }

-    return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));

-}

-#endif

-

-/* CheckBinaryVersion */

-  static int __Pyx_check_binary_version(void) {

-    char ctversion[4], rtversion[4];

-    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);

-    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());

-    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {

-        char message[200];

-        PyOS_snprintf(message, sizeof(message),

-                      "compiletime version %s of module '%.100s' "

-                      "does not match runtime version %s",

-                      ctversion, __Pyx_MODULE_NAME, rtversion);

-        return PyErr_WarnEx(NULL, message, 1);

-    }

-    return 0;

-}

-

-/* InitStrings */

-  static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {

-    while (t->p) {

-        #if PY_MAJOR_VERSION < 3

-        if (t->is_unicode) {

-            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);

-        } else if (t->intern) {

-            *t->p = PyString_InternFromString(t->s);

-        } else {

-            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);

-        }

-        #else

-        if (t->is_unicode | t->is_str) {

-            if (t->intern) {

-                *t->p = PyUnicode_InternFromString(t->s);

-            } else if (t->encoding) {

-                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);

-            } else {

-                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);

-            }

-        } else {

-            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);

-        }

-        #endif

-        if (!*t->p)

-            return -1;

-        if (PyObject_Hash(*t->p) == -1)

-            return -1;

-        ++t;

-    }

-    return 0;

-}

-

-static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {

-    return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));

-}

-static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {

-    Py_ssize_t ignore;

-    return __Pyx_PyObject_AsStringAndSize(o, &ignore);

-}

-#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT

-#if !CYTHON_PEP393_ENABLED

-static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {

-    char* defenc_c;

-    PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);

-    if (!defenc) return NULL;

-    defenc_c = PyBytes_AS_STRING(defenc);

-#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII

-    {

-        char* end = defenc_c + PyBytes_GET_SIZE(defenc);

-        char* c;

-        for (c = defenc_c; c < end; c++) {

-            if ((unsigned char) (*c) >= 128) {

-                PyUnicode_AsASCIIString(o);

-                return NULL;

-            }

-        }

-    }

-#endif

-    *length = PyBytes_GET_SIZE(defenc);

-    return defenc_c;

-}

-#else

-static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {

-    if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;

-#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII

-    if (likely(PyUnicode_IS_ASCII(o))) {

-        *length = PyUnicode_GET_LENGTH(o);

-        return PyUnicode_AsUTF8(o);

-    } else {

-        PyUnicode_AsASCIIString(o);

-        return NULL;

-    }

-#else

-    return PyUnicode_AsUTF8AndSize(o, length);

-#endif

-}

-#endif

-#endif

-static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {

-#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT

-    if (

-#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII

-            __Pyx_sys_getdefaultencoding_not_ascii &&

-#endif

-            PyUnicode_Check(o)) {

-        return __Pyx_PyUnicode_AsStringAndSize(o, length);

-    } else

-#endif

-#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))

-    if (PyByteArray_Check(o)) {

-        *length = PyByteArray_GET_SIZE(o);

-        return PyByteArray_AS_STRING(o);

-    } else

-#endif

-    {

-        char* result;

-        int r = PyBytes_AsStringAndSize(o, &result, length);

-        if (unlikely(r < 0)) {

-            return NULL;

-        } else {

-            return result;

-        }

-    }

-}

-static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {

-   int is_true = x == Py_True;

-   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;

-   else return PyObject_IsTrue(x);

-}

-static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {

-    int retval;

-    if (unlikely(!x)) return -1;

-    retval = __Pyx_PyObject_IsTrue(x);

-    Py_DECREF(x);

-    return retval;

-}

-static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) {

-#if PY_MAJOR_VERSION >= 3

-    if (PyLong_Check(result)) {

-        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,

-                "__int__ returned non-int (type %.200s).  "

-                "The ability to return an instance of a strict subclass of int "

-                "is deprecated, and may be removed in a future version of Python.",

-                Py_TYPE(result)->tp_name)) {

-            Py_DECREF(result);

-            return NULL;

-        }

-        return result;

-    }

-#endif

-    PyErr_Format(PyExc_TypeError,

-                 "__%.4s__ returned non-%.4s (type %.200s)",

-                 type_name, type_name, Py_TYPE(result)->tp_name);

-    Py_DECREF(result);

-    return NULL;

-}

-static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {

-#if CYTHON_USE_TYPE_SLOTS

-  PyNumberMethods *m;

-#endif

-  const char *name = NULL;

-  PyObject *res = NULL;

-#if PY_MAJOR_VERSION < 3

-  if (likely(PyInt_Check(x) || PyLong_Check(x)))

-#else

-  if (likely(PyLong_Check(x)))

-#endif

-    return __Pyx_NewRef(x);

-#if CYTHON_USE_TYPE_SLOTS

-  m = Py_TYPE(x)->tp_as_number;

-  #if PY_MAJOR_VERSION < 3

-  if (m && m->nb_int) {

-    name = "int";

-    res = m->nb_int(x);

-  }

-  else if (m && m->nb_long) {

-    name = "long";

-    res = m->nb_long(x);

-  }

-  #else

-  if (likely(m && m->nb_int)) {

-    name = "int";

-    res = m->nb_int(x);

-  }

-  #endif

-#else

-  if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {

-    res = PyNumber_Int(x);

-  }

-#endif

-  if (likely(res)) {

-#if PY_MAJOR_VERSION < 3

-    if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) {

-#else

-    if (unlikely(!PyLong_CheckExact(res))) {

-#endif

-        return __Pyx_PyNumber_IntOrLongWrongResultType(res, name);

-    }

-  }

-  else if (!PyErr_Occurred()) {

-    PyErr_SetString(PyExc_TypeError,

-                    "an integer is required");

-  }

-  return res;

-}

-static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {

-  Py_ssize_t ival;

-  PyObject *x;

-#if PY_MAJOR_VERSION < 3

-  if (likely(PyInt_CheckExact(b))) {

-    if (sizeof(Py_ssize_t) >= sizeof(long))

-        return PyInt_AS_LONG(b);

-    else

-        return PyInt_AsSsize_t(b);

-  }

-#endif

-  if (likely(PyLong_CheckExact(b))) {

-    #if CYTHON_USE_PYLONG_INTERNALS

-    const digit* digits = ((PyLongObject*)b)->ob_digit;

-    const Py_ssize_t size = Py_SIZE(b);

-    if (likely(__Pyx_sst_abs(size) <= 1)) {

-        ival = likely(size) ? digits[0] : 0;

-        if (size == -1) ival = -ival;

-        return ival;

-    } else {

-      switch (size) {

-         case 2:

-           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {

-             return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));

-           }

-           break;

-         case -2:

-           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {

-             return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));

-           }

-           break;

-         case 3:

-           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {

-             return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));

-           }

-           break;

-         case -3:

-           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {

-             return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));

-           }

-           break;

-         case 4:

-           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {

-             return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));

-           }

-           break;

-         case -4:

-           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {

-             return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));

-           }

-           break;

-      }

-    }

-    #endif

-    return PyLong_AsSsize_t(b);

-  }

-  x = PyNumber_Index(b);

-  if (!x) return -1;

-  ival = PyInt_AsSsize_t(x);

-  Py_DECREF(x);

-  return ival;

-}

-static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {

-  return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);

-}

-static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {

-    return PyInt_FromSize_t(ival);

-}

-

-

-#endif /* Py_PYTHON_H */

diff --git ./DSFD/eval_tools/box_overlaps.pyx b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/eval_tools/box_overlaps.pyx

deleted file mode 100644

index 8c41037111..0000000000

--- ./DSFD/eval_tools/box_overlaps.pyx

+++ /dev/null

@@ -1,55 +0,0 @@

-# --------------------------------------------------------

-# Fast R-CNN

-# Copyright (c) 2015 Microsoft

-# Licensed under The MIT License [see LICENSE for details]

-# Written by Sergey Karayev

-# --------------------------------------------------------

-

-cimport cython

-import numpy as np

-cimport numpy as np

-

-DTYPE = np.float

-ctypedef np.float_t DTYPE_t

-

-def bbox_overlaps(

-        np.ndarray[DTYPE_t, ndim=2] boxes,

-        np.ndarray[DTYPE_t, ndim=2] query_boxes):

-    """

-    Parameters

-    ----------

-    boxes: (N, 4) ndarray of float

-    query_boxes: (K, 4) ndarray of float

-    Returns

-    -------

-    overlaps: (N, K) ndarray of overlap between boxes and query_boxes

-    """

-    cdef unsigned int N = boxes.shape[0]

-    cdef unsigned int K = query_boxes.shape[0]

-    cdef np.ndarray[DTYPE_t, ndim=2] overlaps = np.zeros((N, K), dtype=DTYPE)

-    cdef DTYPE_t iw, ih, box_area

-    cdef DTYPE_t ua

-    cdef unsigned int k, n

-    for k in range(K):

-        box_area = (

-            (query_boxes[k, 2] - query_boxes[k, 0] + 1) *

-            (query_boxes[k, 3] - query_boxes[k, 1] + 1)

-        )

-        for n in range(N):

-            iw = (

-                min(boxes[n, 2], query_boxes[k, 2]) -

-                max(boxes[n, 0], query_boxes[k, 0]) + 1

-            )

-            if iw > 0:

-                ih = (

-                    min(boxes[n, 3], query_boxes[k, 3]) -

-                    max(boxes[n, 1], query_boxes[k, 1]) + 1

-                )

-                if ih > 0:

-                    ua = float(

-                        (boxes[n, 2] - boxes[n, 0] + 1) *

-                        (boxes[n, 3] - boxes[n, 1] + 1) +

-                        box_area - iw * ih

-                    )

-                    overlaps[n, k] = iw * ih / ua

-    return overlaps

\ No newline at end of file

diff --git ./DSFD/eval_tools/setup.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/eval_tools/setup.py

deleted file mode 100644

index 53f56150a9..0000000000

--- ./DSFD/eval_tools/setup.py

+++ /dev/null

@@ -1,22 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-#coding=utf-8

-

-from distutils.core import setup, Extension

-from Cython.Build import cythonize

-import numpy

-

-package = Extension('bbox', ['box_overlaps.pyx'], include_dirs=[numpy.get_include()])

-setup(ext_modules=cythonize([package]))

diff --git ./DSFD/layers/__init__.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/layers/__init__.py

deleted file mode 100644

index e3b3268753..0000000000

--- ./DSFD/layers/__init__.py

+++ /dev/null

@@ -1,23 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-#-*- coding:utf-8 -*-

-

-from __future__ import division

-from __future__ import absolute_import

-from __future__ import print_function

-

-

-from .functions import *

-from .modules import *

diff --git ./DSFD/layers/bbox_utils.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/layers/bbox_utils.py

deleted file mode 100644

index 71766a3145..0000000000

--- ./DSFD/layers/bbox_utils.py

+++ /dev/null

@@ -1,324 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-#coding=utf-8

-

-from __future__ import division

-from __future__ import absolute_import

-from __future__ import print_function

-

-

-import torch

-

-

-def point_form(boxes):

-    """ Convert prior_boxes to (xmin, ymin, xmax, ymax)

-    representation for comparison to point form ground truth data.

-    Args:

-        boxes: (tensor) center-size default boxes from priorbox layers.

-    Return:

-        boxes: (tensor) Converted xmin, ymin, xmax, ymax form of boxes.

-    """

-    return torch.cat((boxes[:, :2] - boxes[:, 2:] / 2,     # xmin, ymin

-                      boxes[:, :2] + boxes[:, 2:] / 2), 1)  # xmax, ymax

-

-

-def center_size(boxes):

-    """ Convert prior_boxes to (cx, cy, w, h)

-    representation for comparison to center-size form ground truth data.

-    Args:

-        boxes: (tensor) point_form boxes

-    Return:

-        boxes: (tensor) Converted xmin, ymin, xmax, ymax form of boxes.

-    """

-    return torch.cat([(boxes[:, 2:] + boxes[:, :2]) / 2,  # cx, cy

-                     boxes[:, 2:] - boxes[:, :2]], 1)  # w, h

-

-

-def intersect(box_a, box_b):

-    """ We resize both tensors to [A,B,2] without new malloc:

-    [A,2] -> [A,1,2] -> [A,B,2]

-    [B,2] -> [1,B,2] -> [A,B,2]

-    Then we compute the area of intersect between box_a and box_b.

-    Args:

-      box_a: (tensor) bounding boxes, Shape: [A,4].

-      box_b: (tensor) bounding boxes, Shape: [B,4].

-    Return:

-      (tensor) intersection area, Shape: [A,B].

-    """

-    A = box_a.size(0)

-    B = box_b.size(0)

-    max_xy = torch.min(box_a[:, 2:].unsqueeze(1).expand(A, B, 2),

-                       box_b[:, 2:].unsqueeze(0).expand(A, B, 2))

-    min_xy = torch.max(box_a[:, :2].unsqueeze(1).expand(A, B, 2),

-                       box_b[:, :2].unsqueeze(0).expand(A, B, 2))

-    inter = torch.clamp((max_xy - min_xy), min=0)

-    return inter[:, :, 0] * inter[:, :, 1]

-

-

-def jaccard(box_a, box_b):

-    """Compute the jaccard overlap of two sets of boxes.  The jaccard overlap

-    is simply the intersection over union of two boxes.  Here we operate on

-    ground truth boxes and default boxes.

-    E.g.:

-        A ∩ B / A ∪ B = A ∩ B / (area(A) + area(B) - A ∩ B)

-    Args:

-        box_a: (tensor) Ground truth bounding boxes, Shape: [num_objects,4]

-        box_b: (tensor) Prior boxes from priorbox layers, Shape: [num_priors,4]

-    Return:

-        jaccard overlap: (tensor) Shape: [box_a.size(0), box_b.size(0)]

-    """

-    inter = intersect(box_a, box_b)

-    area_a = ((box_a[:, 2] - box_a[:, 0]) *

-              (box_a[:, 3] - box_a[:, 1])).unsqueeze(1).expand_as(inter)  # [A,B]

-    area_b = ((box_b[:, 2] - box_b[:, 0]) *

-              (box_b[:, 3] - box_b[:, 1])).unsqueeze(0).expand_as(inter)  # [A,B]

-    union = area_a + area_b - inter

-    return inter / union  # [A,B]

-

-

-def match(threshold, truths, priors, variances, labels, loc_t, conf_t, idx):

-    """Match each prior box with the ground truth box of the highest jaccard

-    overlap, encode the bounding boxes, then return the matched indices

-    corresponding to both confidence and location preds.

-    Args:

-        threshold: (float) The overlap threshold used when mathing boxes.

-        truths: (tensor) Ground truth boxes, Shape: [num_obj, num_priors].

-        priors: (tensor) Prior boxes from priorbox layers, Shape: [n_priors,4].

-        variances: (tensor) Variances corresponding to each prior coord,

-            Shape: [num_priors, 4].

-        labels: (tensor) All the class labels for the image, Shape: [num_obj].

-        loc_t: (tensor) Tensor to be filled w/ endcoded location targets.

-        conf_t: (tensor) Tensor to be filled w/ matched indices for conf preds.

-        idx: (int) current batch index

-    Return:

-        The matched indices corresponding to 1)location and 2)confidence preds.

-    """

-    # jaccard index

-    overlaps = jaccard(

-        truths,

-        point_form(priors)

-    )

-    # (Bipartite Matching)

-    # [1,num_objects] best prior for each ground truth

-    best_prior_overlap, best_prior_idx = overlaps.max(1, keepdim=True)

-    # [1,num_priors] best ground truth for each prior

-    best_truth_overlap, best_truth_idx = overlaps.max(

-        0, keepdim=True)  # 0-2000

-    best_truth_idx.squeeze_(0)

-    best_truth_overlap.squeeze_(0)

-    best_prior_idx.squeeze_(1)

-    best_prior_overlap.squeeze_(1)

-    best_truth_overlap.index_fill_(0, best_prior_idx, 2)  # ensure best prior

-    # TODO refactor: index  best_prior_idx with long tensor

-    # ensure every gt matches with its prior of max overlap

-    for j in range(best_prior_idx.size(0)):

-        best_truth_idx[best_prior_idx[j]] = j

-    _th1, _th2, _th3 = threshold  # _th1 = 0.1 ,_th2 = 0.35,_th3 = 0.5

-

-    N = (torch.sum(best_prior_overlap >= _th2) +

-         torch.sum(best_prior_overlap >= _th3)) // 2

-    matches = truths[best_truth_idx]          # Shape: [num_priors,4]

-    conf = labels[best_truth_idx]         # Shape: [num_priors]

-    conf[best_truth_overlap < _th2] = 0  # label as background

-

-    best_truth_overlap_clone = best_truth_overlap.clone()

-    add_idx = best_truth_overlap_clone.gt(

-        _th1).eq(best_truth_overlap_clone.lt(_th2))

-    best_truth_overlap_clone[1 - add_idx] = 0

-    stage2_overlap, stage2_idx = best_truth_overlap_clone.sort(descending=True)

-

-    stage2_overlap = stage2_overlap.gt(_th1)

-

-    if N > 0:

-        N = torch.sum(stage2_overlap[:N]) if torch.sum(

-            stage2_overlap[:N]) < N else N

-        conf[stage2_idx[:N]] += 1

-

-    loc = encode(matches, priors, variances)

-    loc_t[idx] = loc    # [num_priors,4] encoded offsets to learn

-    conf_t[idx] = conf  # [num_priors] top class label for each prior

-

-

-def match_ssd(threshold, truths, priors, variances, labels, loc_t, conf_t, idx):

-    """Match each prior box with the ground truth box of the highest jaccard

-    overlap, encode the bounding boxes, then return the matched indices

-    corresponding to both confidence and location preds.

-    Args:

-        threshold: (float) The overlap threshold used when mathing boxes.

-        truths: (tensor) Ground truth boxes, Shape: [num_obj, num_priors].

-        priors: (tensor) Prior boxes from priorbox layers, Shape: [n_priors,4].

-        variances: (tensor) Variances corresponding to each prior coord,

-            Shape: [num_priors, 4].

-        labels: (tensor) All the class labels for the image, Shape: [num_obj].

-        loc_t: (tensor) Tensor to be filled w/ endcoded location targets.

-        conf_t: (tensor) Tensor to be filled w/ matched indices for conf preds.

-        idx: (int) current batch index

-    Return:

-        The matched indices corresponding to 1)location and 2)confidence preds.

-    """

-    # jaccard index

-    overlaps = jaccard(

-        truths,

-        point_form(priors)

-    )

-    # (Bipartite Matching)

-    # [1,num_objects] best prior for each ground truth

-    best_prior_overlap, best_prior_idx = overlaps.max(1, keepdim=True)

-    # [1,num_priors] best ground truth for each prior

-    best_truth_overlap, best_truth_idx = overlaps.max(

-        0, keepdim=True)  # 0-2000

-    best_truth_idx.squeeze_(0)

-    best_truth_overlap.squeeze_(0)

-    best_prior_idx.squeeze_(1)

-    best_prior_overlap.squeeze_(1)

-    best_truth_overlap.index_fill_(0, best_prior_idx, 2)  # ensure best prior

-    # TODO refactor: index  best_prior_idx with long tensor

-    # ensure every gt matches with its prior of max overlap

-    for j in range(best_prior_idx.size(0)):

-        best_truth_idx[best_prior_idx[j]] = j

-    matches = truths[best_truth_idx]          # Shape: [num_priors,4]

-    conf = labels[best_truth_idx]         # Shape: [num_priors]

-    conf[best_truth_overlap < threshold] = 0  # label as background

-    loc = encode(matches, priors, variances)

-    loc_t[idx] = loc    # [num_priors,4] encoded offsets to learn

-    conf_t[idx] = conf  # [num_priors] top class label for each prior

-

-

-def encode(matched, priors, variances):

-    """Encode the variances from the priorbox layers into the ground truth boxes

-    we have matched (based on jaccard overlap) with the prior boxes.

-    Args:

-        matched: (tensor) Coords of ground truth for each prior in point-form

-            Shape: [num_priors, 4].

-        priors: (tensor) Prior boxes in center-offset form

-            Shape: [num_priors,4].

-        variances: (list[float]) Variances of priorboxes

-    Return:

-        encoded boxes (tensor), Shape: [num_priors, 4]

-    """

-

-    # dist b/t match center and prior's center

-    g_cxcy = (matched[:, :2] + matched[:, 2:]) / 2 - priors[:, :2]

-    # encode variance

-    g_cxcy /= (variances[0] * priors[:, 2:])

-    # match wh / prior wh

-    g_wh = (matched[:, 2:] - matched[:, :2]) / priors[:, 2:]

-    #g_wh = torch.log(g_wh) / variances[1]

-    g_wh = torch.log(g_wh) / variances[1]

-    # return target for smooth_l1_loss

-    return torch.cat([g_cxcy, g_wh], 1)  # [num_priors,4]

-

-

-# Adapted from https://github.com/Hakuyume/chainer-ssd

-def decode(loc, priors, variances):

-    """Decode locations from predictions using priors to undo

-    the encoding we did for offset regression at train time.

-    Args:

-        loc (tensor): location predictions for loc layers,

-            Shape: [num_priors,4]

-        priors (tensor): Prior boxes in center-offset form.

-            Shape: [num_priors,4].

-        variances: (list[float]) Variances of priorboxes

-    Return:

-        decoded bounding box predictions

-    """

-

-    boxes = torch.cat((

-        priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:],

-        priors[:, 2:] * torch.exp(loc[:, 2:] * variances[1])), 1)

-    boxes[:, :2] -= boxes[:, 2:] / 2

-    boxes[:, 2:] += boxes[:, :2]

-    return boxes

-

-

-def log_sum_exp(x):

-    """Utility function for computing log_sum_exp while determining

-    This will be used to determine unaveraged confidence loss across

-    all examples in a batch.

-    Args:

-        x (Variable(tensor)): conf_preds from conf layers

-    """

-    x_max = x.data.max()

-    return torch.log(torch.sum(torch.exp(x - x_max), 1, keepdim=True)) + x_max

-

-

-# Original author: Francisco Massa:

-# https://github.com/fmassa/object-detection.torch

-# Ported to PyTorch by Max deGroot (02/01/2017)

-def nms(boxes, scores, overlap=0.5, top_k=200):

-    """Apply non-maximum suppression at test time to avoid detecting too many

-    overlapping bounding boxes for a given object.

-    Args:

-        boxes: (tensor) The location preds for the img, Shape: [num_priors,4].

-        scores: (tensor) The class predscores for the img, Shape:[num_priors].

-        overlap: (float) The overlap thresh for suppressing unnecessary boxes.

-        top_k: (int) The Maximum number of box preds to consider.

-    Return:

-        The indices of the kept boxes with respect to num_priors.

-    """

-

-    keep = scores.new(scores.size(0)).zero_().long()

-    if boxes.numel() == 0:

-        return keep

-    x1 = boxes[:, 0]

-    y1 = boxes[:, 1]

-    x2 = boxes[:, 2]

-    y2 = boxes[:, 3]

-    area = torch.mul(x2 - x1, y2 - y1)

-    v, idx = scores.sort(0)  # sort in ascending order

-    # I = I[v >= 0.01]

-    idx = idx[-top_k:]  # indices of the top-k largest vals

-    xx1 = boxes.new()

-    yy1 = boxes.new()

-    xx2 = boxes.new()

-    yy2 = boxes.new()

-    w = boxes.new()

-    h = boxes.new()

-

-    # keep = torch.Tensor()

-    count = 0

-    while idx.numel() > 0:

-        i = idx[-1]  # index of current largest val

-        # keep.append(i)

-        keep[count] = i

-        count += 1

-        if idx.size(0) == 1:

-            break

-        idx = idx[:-1]  # remove kept element from view

-        # load bboxes of next highest vals

-        torch.index_select(x1, 0, idx, out=xx1)

-        torch.index_select(y1, 0, idx, out=yy1)

-        torch.index_select(x2, 0, idx, out=xx2)

-        torch.index_select(y2, 0, idx, out=yy2)

-        # store element-wise max with next highest score

-        xx1 = torch.clamp(xx1, min=x1[i])

-        yy1 = torch.clamp(yy1, min=y1[i])

-        xx2 = torch.clamp(xx2, max=x2[i])

-        yy2 = torch.clamp(yy2, max=y2[i])

-        w.resize_as_(xx2)

-        h.resize_as_(yy2)

-        w = xx2 - xx1

-        h = yy2 - yy1

-        # check sizes of xx1 and xx2.. after each iteration

-        w = torch.clamp(w, min=0.0)

-        h = torch.clamp(h, min=0.0)

-        inter = w * h

-        # IoU = i / (area(a) + area(b) - i)

-        rem_areas = torch.index_select(area, 0, idx)  # load remaining areas)

-        union = (rem_areas - inter) + area[i]

-        IoU = inter / union  # store result in iou

-        # keep only elements with an IoU <= overlap

-        idx = idx[IoU.le(overlap)]

-    return keep, count

diff --git ./DSFD/layers/functions/__init__.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/layers/functions/__init__.py

deleted file mode 100644

index 9bc5349934..0000000000

--- ./DSFD/layers/functions/__init__.py

+++ /dev/null

@@ -1,19 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-from .prior_box import PriorBox 

-from .detection import Detect

-

-__all__=['Detect','PriorBox']

-

diff --git ./DSFD/layers/functions/detection.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/layers/functions/detection.py

deleted file mode 100644

index 94b23f9410..0000000000

--- ./DSFD/layers/functions/detection.py

+++ /dev/null

@@ -1,87 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-# coding=utf-8

-

-from __future__ import division

-from __future__ import absolute_import

-from __future__ import print_function

-

-import torch

-

-from ..bbox_utils import decode, nms

-from torch.autograd import Function

-

-

-class Detect(Function):

-    """At test time, Detect is the final layer of SSD.  Decode location preds,

-    apply non-maximum suppression to location predictions based on conf

-    scores and threshold to a top_k number of output predictions for both

-    confidence score and locations.

-    """

-

-    def __init__(self, cfg):

-        self.num_classes = cfg.NUM_CLASSES

-        self.top_k = cfg.TOP_K

-        self.nms_thresh = cfg.NMS_THRESH

-        self.conf_thresh = cfg.CONF_THRESH

-        self.variance = cfg.VARIANCE

-        self.nms_top_k = cfg.NMS_TOP_K

-

-    def forward(self, loc_data, conf_data, prior_data):

-        """

-        Args:

-            loc_data: (tensor) Loc preds from loc layers

-                Shape: [batch,num_priors*4]

-            conf_data: (tensor) Shape: Conf preds from conf layers

-                Shape: [batch*num_priors,num_classes]

-            prior_data: (tensor) Prior boxes and variances from priorbox layers

-                Shape: [1,num_priors,4] 

-        """

-        num = loc_data.size(0)

-        num_priors = prior_data.size(0)

-

-        conf_preds = conf_data.view(

-            num, num_priors, self.num_classes).transpose(2, 1)

-        batch_priors = prior_data.view(-1, num_priors,

-                                       4).expand(num, num_priors, 4)

-        batch_priors = batch_priors.contiguous().view(-1, 4)

-

-        decoded_boxes = decode(loc_data.view(-1, 4),

-                               batch_priors, self.variance)

-        decoded_boxes = decoded_boxes.view(num, num_priors, 4)

-

-        output = torch.zeros(num, self.num_classes, self.top_k, 5)

-

-        for i in range(num):

-            boxes = decoded_boxes[i].clone()

-            conf_scores = conf_preds[i].clone()

-

-            for cl in range(1, self.num_classes):

-                c_mask = conf_scores[cl].gt(self.conf_thresh)

-                scores = conf_scores[cl][c_mask]

-

-                #VIVID

-                if scores.size(0) == 0:

-                    continue

-                l_mask = c_mask.unsqueeze(1).expand_as(boxes)

-                boxes_ = boxes[l_mask].view(-1, 4)

-                ids, count = nms(boxes_, scores, self.nms_thresh, self.nms_top_k)

-                count = count if count < self.top_k else self.top_k

-

-                output[i, cl, :count] = torch.cat((scores[ids[:count]].unsqueeze(1),

-                                                   boxes_[ids[:count]]), 1)

-        print("get test detect res:", output)

-

-        return output

diff --git ./DSFD/layers/functions/prior_box.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/layers/functions/prior_box.py

deleted file mode 100644

index b49b348072..0000000000

--- ./DSFD/layers/functions/prior_box.py

+++ /dev/null

@@ -1,78 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-#-*- coding:utf-8 -*-

-

-from __future__ import division

-from __future__ import absolute_import

-from __future__ import print_function

-

-import torch

-from itertools import product as product

-import math

-

-

-class PriorBox(object):

-    """Compute priorbox coordinates in center-offset form for each source

-    feature map.

-    """

-

-    def __init__(self, input_size, feature_maps,cfg,pal=2):

-        super(PriorBox, self).__init__()

-        self.imh = input_size[0]

-        self.imw = input_size[1]

-        # number of priors for feature map location (either 4 or 6)

-        self.variance = cfg.VARIANCE or [0.1]

-        #self.feature_maps = cfg.FEATURE_MAPS

-        if pal==1:

-            self.min_sizes = cfg.ANCHOR_SIZES1

-        elif pal==2:

-            self.min_sizes = cfg.ANCHOR_SIZES2

-        self.aspect_ratio = cfg.ASPECT_RATIO

-        self.steps = cfg.STEPS

-        self.clip = cfg.CLIP

-        for v in self.variance:

-            if v <= 0:

-                raise ValueError('Variances must be greater than 0')

-        self.feature_maps = feature_maps

-

-

-    def forward(self):

-        mean = []

-        for k in range(len(self.feature_maps)):

-            feath = self.feature_maps[k][0]

-            featw = self.feature_maps[k][1]

-            for i, j in product(range(feath), range(featw)):

-                f_kw = self.imw / self.steps[k]

-                f_kh = self.imh / self.steps[k]

-

-                cx = (j + 0.5) / f_kw

-                cy = (i + 0.5) / f_kh

-

-                s_kw = self.min_sizes[k] / self.imw

-                s_kh = self.min_sizes[k] / self.imh

-                for ar in self.aspect_ratio:

-                    mean += [cx, cy, s_kw/math.sqrt(ar), s_kh*math.sqrt(ar)]

-

-        output = torch.Tensor(mean).view(-1, 4)

-        if self.clip:

-            output.clamp_(max=1, min=0)

-        return output

-

-

-if __name__ == '__main__':

-    from data.config import cfg

-    p = PriorBox([640, 640], cfg)

-    out = p.forward()

-    print(out.size())

diff --git ./DSFD/layers/modules/__init__.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/layers/modules/__init__.py

deleted file mode 100644

index 1ee0f9eb05..0000000000

--- ./DSFD/layers/modules/__init__.py

+++ /dev/null

@@ -1,26 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-#-*- coding:utf-8 -*-

-

-from __future__ import division

-from __future__ import absolute_import

-from __future__ import print_function

-

-

-from .l2norm import L2Norm

-from .multibox_loss import MultiBoxLoss

-

-__all__ = ['L2Norm', 'MultiBoxLoss']

-

diff --git ./DSFD/layers/modules/l2norm.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/layers/modules/l2norm.py

deleted file mode 100644

index 009890b8dd..0000000000

--- ./DSFD/layers/modules/l2norm.py

+++ /dev/null

@@ -1,50 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-#-*- coding:utf-8 -*-

-

-from __future__ import division

-from __future__ import absolute_import

-from __future__ import print_function

-

-

-import torch

-import torch.nn as nn

-import torch.nn.init as init

-from torch.autograd import Function

-from torch.autograd import Variable

-

-

-

-class L2Norm(nn.Module):

-    def __init__(self,n_channels, scale):

-        super(L2Norm,self).__init__()

-        self.n_channels = n_channels

-        self.gamma = scale or None

-        self.eps = 1e-10

-        self.weight = nn.Parameter(torch.Tensor(self.n_channels))

-        self.reset_parameters()

-

-    def reset_parameters(self):

-        init.constant(self.weight,self.gamma)

-

-    def forward(self, x):

-        norm = x.pow(2).sum(dim=1, keepdim=True).sqrt()+self.eps

-        #x /= norm

-        x = torch.div(x,norm)

-        out = self.weight.unsqueeze(0).unsqueeze(2).unsqueeze(3).expand_as(x) * x

-        return out

-

-

-        

\ No newline at end of file

diff --git ./DSFD/layers/modules/multibox_loss.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/layers/modules/multibox_loss.py

deleted file mode 100644

index 0f938211d3..0000000000

--- ./DSFD/layers/modules/multibox_loss.py

+++ /dev/null

@@ -1,134 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-#-*- coding:utf-8 -*-

-

-from __future__ import division

-from __future__ import absolute_import

-from __future__ import print_function

-

-import math

-import torch

-import torch.nn as nn

-import torch.nn.functional as F

-from torch.autograd import Variable

-

-

-from ..bbox_utils import match, log_sum_exp, match_ssd

-

-

-class MultiBoxLoss(nn.Module):

-    """SSD Weighted Loss Function

-    Compute Targets:

-        1) Produce Confidence Target Indices by matching  ground truth boxes

-           with (default) 'priorboxes' that have jaccard index > threshold parameter

-           (default threshold: 0.5).

-        2) Produce localization target by 'encoding' variance into offsets of ground

-           truth boxes and their matched  'priorboxes'.

-        3) Hard negative mining to filter the excessive number of negative examples

-           that comes with using a large number of default bounding boxes.

-           (default negative:positive ratio 3:1)

-    Objective Loss:

-        L(x,c,l,g) = (Lconf(x, c) + αLloc(x,l,g)) / N

-        Where, Lconf is the CrossEntropy Loss and Lloc is the SmoothL1 Loss

-        weighted by α which is set to 1 by cross val.

-        Args:

-            c: class confidences,

-            l: predicted boxes,

-            g: ground truth boxes

-            N: number of matched default boxes

-        See: https://arxiv.org/pdf/1512.02325.pdf for more details.

-    """

-

-    def __init__(self, cfg, use_gpu=True):

-        super(MultiBoxLoss, self).__init__()

-        self.use_gpu = use_gpu

-        self.num_classes = cfg.NUM_CLASSES

-        self.negpos_ratio = cfg.NEG_POS_RATIOS

-        self.variance = cfg.VARIANCE

-

-        self.threshold = cfg.FACE.OVERLAP_THRESH

-        self.match = match_ssd

-

-    def forward(self, predictions, targets):

-        """Multibox Loss

-        Args:

-            predictions (tuple): A tuple containing loc preds, conf preds,

-            and prior boxes from SSD net.

-                conf shape: torch.size(batch_size,num_priors,num_classes)

-                loc shape: torch.size(batch_size,num_priors,4)

-                priors shape: torch.size(num_priors,4)

-

-            targets (tensor): Ground truth boxes and labels for a batch,

-                shape: [batch_size,num_objs,5] (last idx is the label).

-        """

-        loc_data, conf_data, priors = predictions

-        num = loc_data.size(0)

-        priors = priors[:loc_data.size(1), :]

-        num_priors = (priors.size(0))

-        num_classes = self.num_classes

-

-        # match priors (default boxes) and ground truth boxes

-        loc_t = torch.Tensor(num, num_priors, 4)

-        conf_t = torch.LongTensor(num, num_priors)

-        for idx in range(num):

-            truths = targets[idx][:, :-1].data

-            labels = targets[idx][:, -1].data

-            defaults = priors.data

-            self.match(self.threshold, truths, defaults, self.variance, labels,

-                       loc_t, conf_t, idx)

-        if self.use_gpu:

-            loc_t = loc_t.cuda()

-            conf_t = conf_t.cuda()

-        # wrap targets

-        loc_t = Variable(loc_t, requires_grad=False)

-        conf_t = Variable(conf_t, requires_grad=False)

-

-        pos = conf_t > 0

-        num_pos = pos.sum(dim=1, keepdim=True)

-        # Localization Loss (Smooth L1)

-        # Shape: [batch,num_priors,4]

-        pos_idx = pos.unsqueeze(pos.dim()).expand_as(loc_data)

-        loc_p = loc_data[pos_idx].view(-1, 4)

-        loc_t = loc_t[pos_idx].view(-1, 4)

-        loss_l = F.smooth_l1_loss(loc_p, loc_t, size_average=False)

-        # print(loc_p)

-        # Compute max conf across batch for hard negative mining

-        batch_conf = conf_data.view(-1, self.num_classes)

-        loss_c = log_sum_exp(batch_conf) - \

-            batch_conf.gather(1, conf_t.view(-1, 1))

-

-        # Hard Negative Mining

-        loss_c[pos.view(-1, 1)] = 0  # filter out pos boxes for now

-        loss_c = loss_c.view(num, -1)

-        _, loss_idx = loss_c.sort(1, descending=True)

-        _, idx_rank = loss_idx.sort(1)

-        num_pos = pos.long().sum(1, keepdim=True)

-        num_neg = torch.clamp(self.negpos_ratio *

-                              num_pos, max=pos.size(1) - 1)

-        neg = idx_rank < num_neg.expand_as(idx_rank)

-

-        # Confidence Loss Including Positive and Negative Examples

-        pos_idx = pos.unsqueeze(2).expand_as(conf_data)

-        neg_idx = neg.unsqueeze(2).expand_as(conf_data)

-        conf_p = conf_data[(pos_idx + neg_idx).gt(0)

-                           ].view(-1, self.num_classes)

-        targets_weighted = conf_t[(pos + neg).gt(0)]

-        loss_c = F.cross_entropy(conf_p, targets_weighted, size_average=False)

-

-        # Sum of losses: L(x,c,l,g) = (Lconf(x, c) + αLloc(x,l,g)) / N

-        N = num_pos.data.sum() if num_pos.data.sum() > 0 else num

-        loss_l /= N

-        loss_c /= N

-        return loss_l, loss_c

diff --git ./DSFD/models/DSFD_resnet.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/models/DSFD_resnet.py

deleted file mode 100644

index 22e005a5c2..0000000000

--- ./DSFD/models/DSFD_resnet.py

+++ /dev/null

@@ -1,438 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-#coding=utf-8

-from __future__ import division

-from __future__ import print_function

-from __future__ import absolute_import

-

-import torch

-import torch.nn as nn

-import torch.nn.functional as F

-import torch.nn.init as init

-

-from torch.autograd import Variable

-

-from layers import *

-from data.config import cur_config as cfg

-

-def conv3x3(in_planes, out_planes, stride=1, bias=False):

-    """3x3 convolution with padding"""

-    return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride,

-                     padding=1, bias=bias)

-

-

-def conv1x1(in_planes, out_planes, stride=1):

-    """1x1 convolution"""

-    return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False)

-

-

-class BasicBlock(nn.Module):

-    expansion = 1

-

-    def __init__(self, inplanes, planes, stride=1, downsample=None):

-        super(BasicBlock, self).__init__()

-        self.conv1 = conv3x3(inplanes, planes, stride)

-        self.bn1 = nn.BatchNorm2d(planes)

-        self.relu = nn.ReLU(inplace=True)

-        self.conv2 = conv3x3(planes, planes)

-        self.bn2 = nn.BatchNorm2d(planes)

-        self.downsample = downsample

-        self.stride = stride

-

-    def forward(self, x):

-        residual = x

-

-        out = self.conv1(x)

-        out = self.bn1(out)

-        out = self.relu(out)

-

-        out = self.conv2(out)

-        out = self.bn2(out)

-

-        if self.downsample is not None:

-            residual = self.downsample(x)

-

-        out += residual

-        out = self.relu(out)

-

-        return out

-

-

-class Bottleneck(nn.Module):

-    expansion = 4

-

-    def __init__(self, inplanes, planes, stride=1, downsample=None):

-        super(Bottleneck, self).__init__()

-        self.conv1 = conv1x1(inplanes, planes)

-        self.bn1 = nn.BatchNorm2d(planes)

-        self.conv2 = conv3x3(planes, planes, stride)

-        self.bn2 = nn.BatchNorm2d(planes)

-        self.conv3 = conv1x1(planes, planes * self.expansion)

-        self.bn3 = nn.BatchNorm2d(planes * self.expansion)

-        self.relu = nn.ReLU(inplace=True)

-        self.downsample = downsample

-        self.stride = stride

-

-    def forward(self, x):

-        residual = x

-

-        out = self.conv1(x)

-        out = self.bn1(out)

-        out = self.relu(out)

-

-        out = self.conv2(out)

-        out = self.bn2(out)

-        out = self.relu(out)

-

-        out = self.conv3(out)

-        out = self.bn3(out)

-

-        if self.downsample is not None:

-            residual = self.downsample(x)

-

-        out += residual

-        out = self.relu(out)

-

-        return out

-

-

-class ResNet(nn.Module):

-

-    def __init__(self, block, layers):

-        super(ResNet, self).__init__()

-        self.inplanes = 64

-        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3,

-                               bias=False)

-        self.bn1 = nn.BatchNorm2d(64)

-        self.relu = nn.ReLU(inplace=True)

-        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)

-        self.layer1 = self._make_layer(block, 64, layers[0])

-        self.layer2 = self._make_layer(block, 128, layers[1], stride=2)

-        self.layer3 = self._make_layer(block, 256, layers[2], stride=2)

-        self.layer4 = self._make_layer(block, 512, layers[3], stride=2)

-

-    def _make_layer(self, block, planes, blocks, stride=1):

-        downsample = None

-        if stride != 1 or self.inplanes != planes * block.expansion:

-            downsample = nn.Sequential(

-                conv1x1(self.inplanes, planes * block.expansion, stride),

-                nn.BatchNorm2d(planes * block.expansion),

-            )

-

-        layers = []

-        layers.append(block(self.inplanes, planes, stride, downsample))

-        self.inplanes = planes * block.expansion

-        for _ in range(1, blocks):

-            layers.append(block(self.inplanes, planes))

-

-        return nn.Sequential(*layers)

-

-    def forward(self, x):

-        sources = []

-

-        x = self.conv1(x)

-        x = self.bn1(x)

-        x = self.relu(x)

-        x = self.maxpool(x)

-

-        x = self.layer1(x)

-        sources += [x]

-

-        x = self.layer2(x)

-        sources += [x]

-

-        x = self.layer3(x)

-        sources += [x]

-

-        x = self.layer4(x)

-        sources += [x]

-

-        return sources

-

-

-class FEM(nn.Module):

-    """docstring for FEM"""

-

-    def __init__(self, in_planes):

-        super(FEM, self).__init__()

-        inter_planes = in_planes // 3

-        inter_planes1 = in_planes - 2 * inter_planes

-        self.branch1 = nn.Conv2d(

-            in_planes, inter_planes, kernel_size=3, stride=1, padding=3, dilation=3)

-

-        self.branch2 = nn.Sequential(

-            nn.Conv2d(in_planes, inter_planes, kernel_size=3,

-                      stride=1, padding=3, dilation=3),

-            nn.ReLU(inplace=True),

-            nn.Conv2d(inter_planes, inter_planes, kernel_size=3,

-                      stride=1, padding=3, dilation=3)

-        )

-        self.branch3 = nn.Sequential(

-            nn.Conv2d(in_planes, inter_planes1, kernel_size=3,

-                      stride=1, padding=3, dilation=3),

-            nn.ReLU(inplace=True),

-            nn.Conv2d(inter_planes1, inter_planes1, kernel_size=3,

-                      stride=1, padding=3, dilation=3),

-            nn.ReLU(inplace=True),

-            nn.Conv2d(inter_planes1, inter_planes1, kernel_size=3,

-                      stride=1, padding=3, dilation=3)

-        )

-

-    def forward(self, x):

-        x1 = self.branch1(x)

-        x2 = self.branch2(x)

-        x3 = self.branch3(x)

-        out = torch.cat((x1, x2, x3), dim=1)

-        out = F.relu(out, inplace=True)

-        return out

-

-

-class DSFD(nn.Module):

-    """docstring for SRN"""

-

-    def __init__(self, phase, base, extras, fem_modules, head1, head2, num_classes=2):

-        super(DSFD, self).__init__()

-        self.resnet = base

-        self.phase = phase

-        self.num_classes = num_classes

-        self.extras = nn.ModuleList(extras)

-

-        self.fpn_topdown = nn.ModuleList(fem_modules[0])

-        self.fpn_latlayer = nn.ModuleList(fem_modules[1])

-        self.fpn_fem = nn.ModuleList(fem_modules[2])

-

-        self.loc_pal1 = nn.ModuleList(head1[0])

-        self.conf_pal1 = nn.ModuleList(head1[1])

-        self.loc_pal2 = nn.ModuleList(head2[0])

-        self.conf_pal2 = nn.ModuleList(head2[1])

-

-        if self.phase == 'test':

-            self.softmax = nn.Softmax(dim=-1)

-            self.detect = Detect(cfg)

-

-    def _upsample_prod(self, x, y):

-        _, _, H, W = y.size()

-        return F.upsample(x, size=(H, W), mode='bilinear') * y

-

-    def forward(self, x):

-        size = x.size()[2:]

-        of1, of2, of3, of4 = self.resnet(x)

-

-        x = of4

-        for i in range(2):

-            x = F.relu(self.extras[i](x), inplace=True)

-        of5 = x

-

-        for i in range(2, len(self.extras)):

-            x = F.relu(self.extras[i](x), inplace=True)

-        of6 = x

-

-        conv7 = F.relu(self.fpn_topdown[0](of6), inplace=True)

-

-        x = F.relu(self.fpn_topdown[1](conv7), inplace=True)

-        conv6 = F.relu(self._upsample_prod(

-            x, self.fpn_latlayer[0](of5)), inplace=True)

-

-        x = F.relu(self.fpn_topdown[2](conv6), inplace=True)

-        conv5 = F.relu(self._upsample_prod(

-            x, self.fpn_latlayer[1](of4)), inplace=True)

-

-        x = F.relu(self.fpn_topdown[3](conv5), inplace=True)

-        conv4 = F.relu(self._upsample_prod(

-            x, self.fpn_latlayer[2](of3)), inplace=True)

-

-        x = F.relu(self.fpn_topdown[4](conv4), inplace=True)

-        conv3 = F.relu(self._upsample_prod(

-            x, self.fpn_latlayer[3](of2)), inplace=True)

-

-        x = F.relu(self.fpn_topdown[5](conv3), inplace=True)

-        conv2 = F.relu(self._upsample_prod(

-            x, self.fpn_latlayer[4](of1)), inplace=True)

-

-        ef1 = self.fpn_fem[0](conv2)

-        ef2 = self.fpn_fem[1](conv3)

-        ef3 = self.fpn_fem[2](conv4)

-        ef4 = self.fpn_fem[3](conv5)

-        ef5 = self.fpn_fem[4](conv6)

-        ef6 = self.fpn_fem[5](conv7)

-

-        sources_pal1 = [of1, of2, of3, of4, of5, of6]

-        sources_pal2 = [ef1, ef2, ef3, ef4, ef5, ef6]

-        loc_pal1, conf_pal1 = list(), list()

-        loc_pal2, conf_pal2 = list(), list()

-

-        for (x, l, c) in zip(sources_pal1, self.loc_pal1, self.conf_pal1):

-            loc_pal1.append(l(x).permute(0, 2, 3, 1).contiguous())

-            conf_pal1.append(c(x).permute(0, 2, 3, 1).contiguous())

-

-        for (x, l, c) in zip(sources_pal2, self.loc_pal2, self.conf_pal2):

-            loc_pal2.append(l(x).permute(0, 2, 3, 1).contiguous())

-            conf_pal2.append(c(x).permute(0, 2, 3, 1).contiguous())

-

-        features_maps = []

-        for i in range(len(loc_pal1)):

-            feat = []

-            feat += [loc_pal1[i].size(1), loc_pal1[i].size(2)]

-            features_maps += [feat]

-

-        loc_pal1 = torch.cat([o.view(o.size(0), -1) for o in loc_pal1], 1)

-        conf_pal1 = torch.cat([o.view(o.size(0), -1) for o in conf_pal1], 1)

-

-        loc_pal2 = torch.cat([o.view(o.size(0), -1) for o in loc_pal2], 1)

-        conf_pal2 = torch.cat([o.view(o.size(0), -1) for o in conf_pal2], 1)

-

-        priorbox = PriorBox(size, features_maps, cfg, pal=1)

-        self.priors_pal1 = Variable(priorbox.forward(), volatile=True)

-

-        priorbox = PriorBox(size, features_maps, cfg, pal=2)

-        self.priors_pal2 = Variable(priorbox.forward(), volatile=True)

-

-        if self.phase == 'test':

-            output = self.detect(

-                loc_pal2.view(loc_pal2.size(0), -1, 4),

-                self.softmax(conf_pal2.view(conf_pal2.size(0), -1,

-                                            self.num_classes)),                # conf preds

-                self.priors_pal2.type(type(x.data))

-            )

-

-        else:

-            output = (

-                loc_pal1.view(loc_pal1.size(0), -1, 4),

-                conf_pal1.view(conf_pal1.size(0), -1, self.num_classes),

-                self.priors_pal1,

-                loc_pal2.view(loc_pal2.size(0), -1, 4),

-                conf_pal2.view(conf_pal2.size(0), -1, self.num_classes),

-                self.priors_pal2)

-        return output

-

-    def load_weights(self, base_file):

-        other, ext = os.path.splitext(base_file)

-        if ext == '.pkl' or '.pth':

-            print('Loading weights into state dict...')

-            mdata = torch.load(base_file,

-                               map_location=lambda storage, loc: storage)

-            weights = mdata['weight']

-            epoch = mdata['epoch']

-            self.load_state_dict(weights)

-            print('Finished!')

-        else:

-            print('Sorry only .pth and .pkl files supported.')

-        return epoch

-

-    def xavier(self, param):

-        init.xavier_uniform(param)

-

-    def weights_init(self, m):

-        if isinstance(m, nn.Conv2d):

-            self.xavier(m.weight.data)

-            m.bias.data.zero_()

-

-        if isinstance(m, nn.ConvTranspose2d):

-            self.xavier(m.weight.data)

-            if 'bias' in m.state_dict().keys():

-                m.bias.data.zero_()

-

-        if isinstance(m, nn.BatchNorm2d):

-            m.weight.data[...] = 1

-            m.bias.data.zero_()

-

-extras_cfg = [256, 'S', 512, 128, 'S', 256]

-

-net_cfg = [256, 512, 1024, 2048, 512, 256]

-

-

-def add_extras(cfg, i):

-    layers = []

-    in_channels = i

-    flag = False

-    for k, v in enumerate(cfg):

-        if in_channels != 'S':

-            if v == 'S':

-                layers += [nn.Conv2d(in_channels, cfg[k + 1],

-                                     kernel_size=(1, 3)[flag], stride=2, padding=1)]

-            else:

-                layers += [nn.Conv2d(in_channels, v, kernel_size=(1, 3)[flag])]

-            flag = not flag

-        in_channels = v

-    return layers

-

-

-def multibox(cfg, num_classes=2):

-    conf_layers = []

-    loc_layers = []

-    for k, v in enumerate(cfg):

-        loc_layers += [nn.Conv2d(v, 4, kernel_size=3, padding=1)]

-        conf_layers += [nn.Conv2d(v, num_classes, kernel_size=3, padding=1)]

-    return (loc_layers, conf_layers)

-

-

-def fem_module(cfg):

-    topdown_layers = []

-    lat_layers = []

-    fem_layers = []

-

-    topdown_layers += [nn.Conv2d(cfg[-1], cfg[-1],

-                                 kernel_size=1, stride=1, padding=0)]

-    for k, v in enumerate(cfg):

-        fem_layers += [FEM(v)]

-        cur_channel = cfg[len(cfg) - 1 - k]

-        if len(cfg) - 1 - k > 0:

-            last_channel = cfg[len(cfg) - 2 - k]

-            topdown_layers += [nn.Conv2d(cur_channel, last_channel,

-                                         kernel_size=1, stride=1, padding=0)]

-            lat_layers += [nn.Conv2d(last_channel, last_channel,

-                                     kernel_size=1, stride=1, padding=0)]

-    return (topdown_layers, lat_layers, fem_layers)

-

-

-def resnet50():

-    """Constructs a ResNet-50 model.

-    Args:

-        pretrained (bool): If True, returns a model pre-trained on ImageNet

-    """

-    model = ResNet(Bottleneck, [3, 4, 6, 3])

-    return model

-

-

-def resnet101():

-    model = ResNet(Bottleneck, [3, 4, 23, 3])

-    return model

-

-

-def resnet152():

-    model = ResNet(Bottleneck, [3, 8, 36, 3])

-    return model

-

-

-def model_map(net_name='resnet50'):

-    _dicts = {'resnet50': resnet50,

-              'resnet101': resnet101, 'resnet152': resnet152}

-    return _dicts[net_name]()

-

-

-def build_net_resnet(phase, num_classes=2, net_name='resnet50'):

-    resnet = model_map(net_name)

-    extras = add_extras(extras_cfg, 2048)

-    head_pal1 = multibox(net_cfg, num_classes)

-    head_pal2 = multibox(net_cfg, num_classes)

-    fem_modules = fem_module(net_cfg)

-    model = DSFD(phase, resnet, extras, fem_modules,

-                 head_pal1, head_pal2, num_classes)

-    return model

-

-if __name__ == '__main__':

-    inputs = Variable(torch.randn(1, 3, 640, 640))

-    net = build_net('train', 2, 101)

-    out = net(inputs)

diff --git ./DSFD/models/DSFD_vgg.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/models/DSFD_vgg.py

deleted file mode 100644

index 8a842e593a..0000000000

--- ./DSFD/models/DSFD_vgg.py

+++ /dev/null

@@ -1,374 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-#coding=utf-8

-

-from __future__ import division

-from __future__ import absolute_import

-from __future__ import print_function

-

-import os

-import numpy as np

-

-import torch

-import torch.nn as nn

-import torch.nn.init as init

-import torch.nn.functional as F

-from torch.autograd import Variable

-

-from layers import *

-from data.config import cur_config as cfg

-

-

-class FEM(nn.Module):

-    """docstring for FEM"""

-

-    def __init__(self, in_planes):

-        super(FEM, self).__init__()

-        inter_planes = in_planes // 3

-        inter_planes1 = in_planes - 2 * inter_planes

-        self.branch1 = nn.Conv2d(

-            in_planes, inter_planes, kernel_size=3, stride=1, padding=3, dilation=3)

-

-        self.branch2 = nn.Sequential(

-            nn.Conv2d(in_planes, inter_planes, kernel_size=3,

-                      stride=1, padding=3, dilation=3),

-            nn.ReLU(inplace=True),

-            nn.Conv2d(inter_planes, inter_planes, kernel_size=3,

-                      stride=1, padding=3, dilation=3)

-        )

-        self.branch3 = nn.Sequential(

-            nn.Conv2d(in_planes, inter_planes1, kernel_size=3,

-                      stride=1, padding=3, dilation=3),

-            nn.ReLU(inplace=True),

-            nn.Conv2d(inter_planes1, inter_planes1, kernel_size=3,

-                      stride=1, padding=3, dilation=3),

-            nn.ReLU(inplace=True),

-            nn.Conv2d(inter_planes1, inter_planes1, kernel_size=3,

-                      stride=1, padding=3, dilation=3)

-        )

-

-    def forward(self, x):

-        x1 = self.branch1(x)

-        x2 = self.branch2(x)

-        x3 = self.branch3(x)

-        out = torch.cat((x1, x2, x3), dim=1)

-        out = F.relu(out, inplace=True)

-        return out

-

-

-class DSFD(nn.Module):

-    """Single Shot Multibox Architecture

-    The network is composed of a base VGG network followed by the

-    added multibox conv layers.  Each multibox layer branches into

-        1) conv2d for class conf scores

-        2) conv2d for localization predictions

-        3) associated priorbox layer to produce default bounding

-           boxes specific to the layer's feature map size.

-    See: https://arxiv.org/pdf/1512.02325.pdf for more details.

-

-    Args:

-        phase: (string) Can be "test" or "train"

-        size: input image size

-        base: VGG16 layers for input, size of either 300 or 500

-        extras: extra layers that feed to multibox loc and conf layers

-        head: "multibox head" consists of loc and conf conv layers

-    """

-

-    def __init__(self, phase, base, extras, fem, head1, head2, num_classes):

-        super(DSFD, self).__init__()

-        self.phase = phase

-        self.num_classes = num_classes

-        self.vgg = nn.ModuleList(base)

-

-        self.L2Normof1 = L2Norm(256, 10)

-        self.L2Normof2 = L2Norm(512, 8)

-        self.L2Normof3 = L2Norm(512, 5)

-

-        self.extras = nn.ModuleList(extras)

-        self.fpn_topdown = nn.ModuleList(fem[0])

-        self.fpn_latlayer = nn.ModuleList(fem[1])

-

-        self.fpn_fem = nn.ModuleList(fem[2])

-

-        self.L2Normef1 = L2Norm(256, 10)

-        self.L2Normef2 = L2Norm(512, 8)

-        self.L2Normef3 = L2Norm(512, 5)

-

-        self.loc_pal1 = nn.ModuleList(head1[0])

-        self.conf_pal1 = nn.ModuleList(head1[1])

-

-        self.loc_pal2 = nn.ModuleList(head2[0])

-        self.conf_pal2 = nn.ModuleList(head2[1])

-

-        if self.phase=='test':

-            self.softmax = nn.Softmax(dim=-1)

-            self.detect = Detect(cfg)

-

-    def _upsample_prod(self, x, y):

-        _, _, H, W = y.size()

-        return F.upsample(x, size=(H, W), mode='bilinear') * y

-

-    def forward(self, x):

-        size = x.size()[2:]

-        pal1_sources = list()

-        pal2_sources = list()

-        loc_pal1 = list()

-        conf_pal1 = list()

-        loc_pal2 = list()

-        conf_pal2 = list()

-

-        # apply vgg up to conv4_3 relu

-        for k in range(16):

-            x = self.vgg[k](x)

-        of1 = x

-        s = self.L2Normof1(of1)

-        pal1_sources.append(s)

-        # apply vgg up to fc7

-        for k in range(16, 23):

-            x = self.vgg[k](x)

-        of2 = x

-        s = self.L2Normof2(of2)

-        pal1_sources.append(s)

-

-        for k in range(23, 30):

-            x = self.vgg[k](x)

-        of3 = x

-        s = self.L2Normof3(of3)

-        pal1_sources.append(s)

-

-        for k in range(30, len(self.vgg)):

-            x = self.vgg[k](x)

-        of4 = x

-        pal1_sources.append(of4)

-        # apply extra layers and cache source layer outputs

-

-        for k in range(2):

-            x = F.relu(self.extras[k](x), inplace=True)

-        of5 = x

-        pal1_sources.append(of5)

-        for k in range(2, 4):

-            x = F.relu(self.extras[k](x), inplace=True)

-        of6 = x

-        pal1_sources.append(of6)

-

-        conv7 = F.relu(self.fpn_topdown[0](of6), inplace=True)

-

-        x = F.relu(self.fpn_topdown[1](conv7), inplace=True)

-        conv6 = F.relu(self._upsample_prod(

-            x, self.fpn_latlayer[0](of5)), inplace=True)

-

-        x = F.relu(self.fpn_topdown[2](conv6), inplace=True)

-        convfc7_2 = F.relu(self._upsample_prod(

-            x, self.fpn_latlayer[1](of4)), inplace=True)

-

-        x = F.relu(self.fpn_topdown[3](convfc7_2), inplace=True)

-        conv5 = F.relu(self._upsample_prod(

-            x, self.fpn_latlayer[2](of3)), inplace=True)

-

-        x = F.relu(self.fpn_topdown[4](conv5), inplace=True)

-        conv4 = F.relu(self._upsample_prod(

-            x, self.fpn_latlayer[3](of2)), inplace=True)

-

-        x = F.relu(self.fpn_topdown[5](conv4), inplace=True)

-        conv3 = F.relu(self._upsample_prod(

-            x, self.fpn_latlayer[4](of1)), inplace=True)

-

-        ef1 = self.fpn_fem[0](conv3)

-        ef1 = self.L2Normef1(ef1)

-        ef2 = self.fpn_fem[1](conv4)

-        ef2 = self.L2Normef2(ef2)

-        ef3 = self.fpn_fem[2](conv5)

-        ef3 = self.L2Normef3(ef3)

-        ef4 = self.fpn_fem[3](convfc7_2)

-        ef5 = self.fpn_fem[4](conv6)

-        ef6 = self.fpn_fem[5](conv7)

-

-        pal2_sources = (ef1, ef2, ef3, ef4, ef5, ef6)

-        for (x, l, c) in zip(pal1_sources, self.loc_pal1, self.conf_pal1):

-            loc_pal1.append(l(x).permute(0, 2, 3, 1).contiguous())

-            conf_pal1.append(c(x).permute(0, 2, 3, 1).contiguous())

-

-        for (x, l, c) in zip(pal2_sources, self.loc_pal2, self.conf_pal2):

-            loc_pal2.append(l(x).permute(0, 2, 3, 1).contiguous())

-            conf_pal2.append(c(x).permute(0, 2, 3, 1).contiguous())

-

-        features_maps = []

-        for i in range(len(loc_pal1)):

-            feat = []

-            feat += [loc_pal1[i].size(1), loc_pal1[i].size(2)]

-            features_maps += [feat]

-

-        loc_pal1 = torch.cat([o.view(o.size(0), -1)

-                              for o in loc_pal1], 1)

-        conf_pal1 = torch.cat([o.view(o.size(0), -1)

-                               for o in conf_pal1], 1)

-

-        loc_pal2 = torch.cat([o.view(o.size(0), -1)

-                              for o in loc_pal2], 1)

-        conf_pal2 = torch.cat([o.view(o.size(0), -1)

-                               for o in conf_pal2], 1)

-

-        priorbox = PriorBox(size, features_maps, cfg, pal=1)

-        self.priors_pal1 = Variable(priorbox.forward(), volatile=True)

-

-        priorbox = PriorBox(size, features_maps, cfg, pal=2)

-        self.priors_pal2 = Variable(priorbox.forward(), volatile=True)

-

-        if self.phase == 'test':

-            output = self.detect(

-                loc_pal2.view(loc_pal2.size(0), -1, 4),

-                self.softmax(conf_pal2.view(conf_pal2.size(0), -1,

-                                            self.num_classes)),                # conf preds

-                self.priors_pal2.type(type(x.data))

-            )

-

-        else:

-            output = (

-                loc_pal1.view(loc_pal1.size(0), -1, 4),

-                conf_pal1.view(conf_pal1.size(0), -1, self.num_classes),

-                self.priors_pal1,

-                loc_pal2.view(loc_pal2.size(0), -1, 4),

-                conf_pal2.view(conf_pal2.size(0), -1, self.num_classes),

-                self.priors_pal2)

-        return output

-

-    def load_weights(self, base_file):

-        other, ext = os.path.splitext(base_file)

-        if ext == '.pkl' or '.pth':

-            print('Loading weights into state dict...')

-            mdata = torch.load(base_file,

-                               map_location=lambda storage, loc: storage)

-            weights = mdata['weight']

-            epoch = mdata['epoch']

-            self.load_state_dict(weights)

-            print('Finished!')

-        else:

-            print('Sorry only .pth and .pkl files supported.')

-        return epoch

-

-    def xavier(self, param):

-        init.xavier_uniform(param)

-

-    def weights_init(self, m):

-        if isinstance(m, nn.Conv2d):

-            self.xavier(m.weight.data)

-            m.bias.data.zero_()

-

-        if isinstance(m,nn.ConvTranspose2d):

-            self.xavier(m.weight.data)

-            if 'bias' in m.state_dict().keys():

-                m.bias.data.zero_()

-

-        if isinstance(m,nn.BatchNorm2d):

-            m.weight.data[...] = 1

-            m.bias.data.zero_()

-

-

-vgg_cfg = [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'C', 512, 512, 512, 'M',

-           512, 512, 512, 'M']

-

-extras_cfg = [256, 'S', 512, 128, 'S', 256]

-

-fem_cfg = [256, 512, 512, 1024, 512, 256]

-

-

-def fem_module(cfg):

-    topdown_layers = []

-    lat_layers = []

-    fem_layers = []

-

-    topdown_layers += [nn.Conv2d(cfg[-1], cfg[-1],

-                                 kernel_size=1, stride=1, padding=0)]

-    for k, v in enumerate(cfg):

-        fem_layers += [FEM(v)]

-        cur_channel = cfg[len(cfg) - 1 - k]

-        if len(cfg) - 1 - k > 0:

-            last_channel = cfg[len(cfg) - 2 - k]

-            topdown_layers += [nn.Conv2d(cur_channel, last_channel,

-                                         kernel_size=1, stride=1, padding=0)]

-            lat_layers += [nn.Conv2d(last_channel, last_channel,

-                                     kernel_size=1, stride=1, padding=0)]

-    return (topdown_layers, lat_layers, fem_layers)

-

-

-def vgg(cfg, i, batch_norm=False):

-    layers = []

-    in_channels = i

-    for v in cfg:

-        if v == 'M':

-            layers += [nn.MaxPool2d(kernel_size=2, stride=2)]

-        elif v == 'C':

-            layers += [nn.MaxPool2d(kernel_size=2, stride=2, ceil_mode=True)]

-        else:

-            conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)

-            if batch_norm:

-                layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(inplace=True)]

-            else:

-                layers += [conv2d, nn.ReLU(inplace=True)]

-            in_channels = v

-    conv6 = nn.Conv2d(512, 1024, kernel_size=3, padding=3, dilation=3)

-    conv7 = nn.Conv2d(1024, 1024, kernel_size=1)

-    layers += [conv6,

-               nn.ReLU(inplace=True), conv7, nn.ReLU(inplace=True)]

-    return layers

-

-

-def add_extras(cfg, i, batch_norm=False):

-    # Extra layers added to VGG for feature scaling

-    layers = []

-    in_channels = i

-    flag = False

-    for k, v in enumerate(cfg):

-        if in_channels != 'S':

-            if v == 'S':

-                layers += [nn.Conv2d(in_channels, cfg[k + 1],

-                                     kernel_size=(1, 3)[flag], stride=2, padding=1)]

-            else:

-                layers += [nn.Conv2d(in_channels, v, kernel_size=(1, 3)[flag])]

-            flag = not flag

-        in_channels = v

-    return layers

-

-

-def multibox(vgg, extra_layers, num_classes):

-    loc_layers = []

-    conf_layers = []

-    vgg_source = [14, 21, 28, -2]

-

-    for k, v in enumerate(vgg_source):

-        loc_layers += [nn.Conv2d(vgg[v].out_channels,

-                                 4, kernel_size=3, padding=1)]

-        conf_layers += [nn.Conv2d(vgg[v].out_channels,

-                                  num_classes, kernel_size=3, padding=1)]

-    for k, v in enumerate(extra_layers[1::2], 2):

-        loc_layers += [nn.Conv2d(v.out_channels,

-                                 4, kernel_size=3, padding=1)]

-        conf_layers += [nn.Conv2d(v.out_channels,

-                                  num_classes, kernel_size=3, padding=1)]

-    return (loc_layers, conf_layers)

-

-

-def build_net_vgg(phase, num_classes=2):

-    base = vgg(vgg_cfg, 3)

-    extras = add_extras(extras_cfg, 1024)

-    head1 = multibox(base, extras, num_classes)

-    head2 = multibox(base, extras, num_classes)

-    fem = fem_module(fem_cfg)

-    return DSFD(phase, base, extras, fem, head1, head2, num_classes)

-

-if __name__ == '__main__':

-    inputs = Variable(torch.randn(1, 3, 640, 640))

-    net = build_net('train', 2)

-    out = net(inputs)

diff --git ./DSFD/models/__init__.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/models/__init__.py

deleted file mode 100644

index 89552b1d3f..0000000000

--- ./DSFD/models/__init__.py

+++ /dev/null

@@ -1,13 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

\ No newline at end of file

diff --git ./DSFD/models/factory.py b/contrib/ACL_PyTorch/Research/cv/detection/DSFD/models/factory.py

deleted file mode 100644

index b42d14b830..0000000000

--- ./DSFD/models/factory.py

+++ /dev/null

@@ -1,50 +0,0 @@

-# Copyright 2021 Huawei Technologies Co., Ltd

-#

-# Licensed under the Apache License, Version 2.0 (the "License");

-# you may not use this file except in compliance with the License.

-# You may obtain a copy of the License at

-#

-#     http://www.apache.org/licenses/LICENSE-2.0

-#

-# Unless required by applicable law or agreed to in writing, software

-# distributed under the License is distributed on an "AS IS" BASIS,

-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-# See the License for the specific language governing permissions and

-# limitations under the License.

-

-# -*- coding: utf-8 -*-

-from __future__ import division

-from __future__ import print_function

-from __future__ import absolute_import

-

-import torch

-import torch.backends.cudnn as cudnn

-

-#from .DSFD_vgg import build_net_vgg

-from .DSFD_resnet import build_net_resnet

-

-

-def build_net(phase, num_classes=2, model='vgg'):

-    if phase != "test" and phase != "train":

-        print("ERROR: Phase: " + phase + " not recognized")

-        return

-

-    if model != 'vgg' and 'resnet' not in model:

-        print("ERROR: model:" + model + " not recognized")

-        return

-

-    if model == 'vgg':

-        return build_net_vgg(phase, num_classes)

-    else:

-        return build_net_resnet(phase, num_classes, model)

-

-

-

-def basenet_factory(model='vgg'):

-	if model=='vgg':

-		basenet = 'vgg16_reducedfc.pth'

-

-	elif 'resnet' in model:

-		basenet = '{}.pth'.format(model)

-	return basenet

-