/* Generated by Cython 0.24 */

/* BEGIN: Cython Metadata
{
    "distutils": {}
}
END: Cython Metadata */

#define PY_SSIZE_T_CLEAN
#include "Python.h"
#ifndef Py_PYTHON_H
    #error Python headers needed to compile C extensions, please install development version of Python.
#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)
    #error Cython requires Python 2.6+ or Python 3.2+.
#else
#define CYTHON_ABI "0_24"
#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
#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_CPYTHON 0
#else
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_CPYTHON 1
#endif
#if !defined(CYTHON_USE_PYLONG_INTERNALS) && CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000
  #define CYTHON_USE_PYLONG_INTERNALS 1
#endif
#if CYTHON_USE_PYLONG_INTERNALS
  #include "longintrepr.h"
  #undef SHIFT
  #undef BASE
  #undef MASK
#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"
  #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 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
#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
  #define CYTHON_PEP393_ENABLED 1
  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                              0 : _PyUnicode_Ready((PyObject *)(op)))
  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
  #define __Pyx_PyUnicode_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_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
#else
  #define CYTHON_PEP393_ENABLED 0
  #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_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_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(PyObject_Format)
  #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
#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
#define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? 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
#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
#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
#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) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
#else
  #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
#endif
#if PY_VERSION_HEX >= 0x030500B1
#define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
#define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
#elif CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
typedef struct {
    unaryfunc am_await;
    unaryfunc am_aiter;
    unaryfunc am_anext;
} __Pyx_PyAsyncMethodsStruct;
#define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
#else
#define __Pyx_PyType_AsAsync(obj) NULL
#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
#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)

#ifndef CYTHON_INLINE
  #if 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 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


#define __PYX_ERR(f_index, lineno, Ln_error) \
{ \
  __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \
}

#if PY_MAJOR_VERSION >= 3
  #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

#ifndef __PYX_EXTERN_C
  #ifdef __cplusplus
    #define __PYX_EXTERN_C extern "C"
  #else
    #define __PYX_EXTERN_C extern
  #endif
#endif

#define __PYX_HAVE__asynq__contexts
#define __PYX_HAVE_API__asynq__contexts
#include "string.h"
#include "stdio.h"
#include "pythread.h"
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */

#ifdef PYREX_WITHOUT_ASSERTIONS
#define CYTHON_WITHOUT_ASSERTIONS
#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_NCP_UNUSED
# if CYTHON_COMPILING_IN_CPYTHON
#  define CYTHON_NCP_UNUSED
# else
#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
# endif
#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_DEFAULT 0
#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)))  )
#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) && defined (_M_X64)
    #define __Pyx_sst_abs(value) _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 char* __Pyx_PyObject_AsString(PyObject*);
static CYTHON_INLINE 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_PyObject_AsSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsUString(s)    ((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)
#if PY_MAJOR_VERSION < 3
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);
}
#else
#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen
#endif
#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)
#define __Pyx_PyBool_FromLong(b) ((b) ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False))
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
#if CYTHON_COMPILING_IN_CPYTHON
#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));
    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 PyObject *__pyx_m;
static PyObject *__pyx_d;
static PyObject *__pyx_b;
static PyObject *__pyx_empty_tuple;
static PyObject *__pyx_empty_bytes;
static PyObject *__pyx_empty_unicode;
static int __pyx_lineno;
static int __pyx_clineno = 0;
static const char * __pyx_cfilenm= __FILE__;
static const char *__pyx_filename;


static const char *__pyx_f[] = {
  "asynq/contexts.py",
  "asynq/contexts.pxd",
  "type.pxd",
  "bool.pxd",
  "complex.pxd",
  "events.pxd",
  "helpers.pxd",
  "asynq/_debug.pxd",
  "asynq/futures.pxd",
  "asynq/batching.pxd",
  "asynq/scheduler.pxd",
  "asynq/async_task.pxd",
};

/*--- Type declarations ---*/
struct __pyx_obj_5qcore_6events_EventHook;
struct __pyx_obj_5qcore_6events_SinkingEventHook;
struct __pyx_obj_5qcore_6events_EventInterceptor;
struct __pyx_obj_5qcore_7helpers_MarkerObject;
struct __pyx_obj_5qcore_7helpers_EmptyContext;
struct __pyx_obj_5qcore_7helpers_CythonCachedHashWrapper;
struct __pyx_obj_5qcore_7helpers_ScopedValue;
struct __pyx_obj_5qcore_7helpers__ScopedValueOverrideContext;
struct __pyx_obj_5qcore_7helpers__PropertyOverrideContext;
struct __pyx_obj_5asynq_6_debug_DebugOptions;
struct __pyx_obj_5asynq_7futures_FutureBase;
struct __pyx_obj_5asynq_7futures_Future;
struct __pyx_obj_5asynq_7futures_ConstFuture;
struct __pyx_obj_5asynq_7futures_ErrorFuture;
struct __pyx_obj_5asynq_8batching_BatchBase;
struct __pyx_obj_5asynq_8batching_BatchItemBase;
struct __pyx_obj_5asynq_8batching_DebugBatchItem;
struct __pyx_obj_5asynq_8batching_DebugBatch;
struct __pyx_obj_5asynq_9scheduler_TaskScheduler;
struct __pyx_obj_5asynq_9scheduler_TaskSchedulerActivator;
struct __pyx_obj_5asynq_10async_task_AsyncTask;
struct __pyx_obj_5asynq_8contexts_NonAsyncContext;
struct __pyx_obj_5asynq_8contexts_AsyncContext;
struct __pyx_opt_args_5qcore_7helpers_safe_str;
struct __pyx_opt_args_5qcore_7helpers_safe_repr;

/* "qcore/helpers.pxd":75
 * 
 * cpdef object ellipsis(object source, int max_length)
 * cpdef object safe_str(object source, int max_length=?)             # <<<<<<<<<<<<<<
 * cpdef object safe_repr(object source, int max_length=?)
 * 
 */
struct __pyx_opt_args_5qcore_7helpers_safe_str {
  int __pyx_n;
  int max_length;
};

/* "qcore/helpers.pxd":76
 * cpdef object ellipsis(object source, int max_length)
 * cpdef object safe_str(object source, int max_length=?)
 * cpdef object safe_repr(object source, int max_length=?)             # <<<<<<<<<<<<<<
 * 
 * 
 */
struct __pyx_opt_args_5qcore_7helpers_safe_repr {
  int __pyx_n;
  int max_length;
};
struct __pyx_opt_args_5qcore_10inspection_wraps;

/* "qcore/inspection.pxd":38
 * cpdef bint is_classmethod(object fn) except -1
 * 
 * cpdef wraps(object wrapped, object assigned=?, object updated=?)             # <<<<<<<<<<<<<<
 */
struct __pyx_opt_args_5qcore_10inspection_wraps {
  int __pyx_n;
  PyObject *assigned;
  PyObject *updated;
};
struct __pyx_opt_args_5asynq_6_debug_12DebugOptions_DUMP_ALL;

/* "_debug.pxd":44
 *     cdef public object ENABLE_COMPLEX_ASSERTIONS
 * 
 *     cpdef DUMP_ALL(self, value=?)             # <<<<<<<<<<<<<<
 * 
 * cdef public DebugOptions options
 */
struct __pyx_opt_args_5asynq_6_debug_12DebugOptions_DUMP_ALL {
  int __pyx_n;
  PyObject *value;
};
struct __pyx_opt_args_5asynq_7futures_10FutureBase_dump;

/* "futures.pxd":46
 *     cdef inline raise_if_error(self)
 * 
 *     cpdef dump(self, int indent=?)             # <<<<<<<<<<<<<<
 * 
 * 
 */
struct __pyx_opt_args_5asynq_7futures_10FutureBase_dump {
  int __pyx_n;
  int indent;
};
struct __pyx_opt_args_5asynq_8batching_9BatchBase_cancel;
struct __pyx_opt_args_5asynq_8batching_9BatchBase_dump;
struct __pyx_opt_args_5asynq_8batching_sync;

/* "batching.pxd":35
 * 
 *     cpdef flush(self)
 *     cpdef cancel(self, object error=?)             # <<<<<<<<<<<<<<
 * 
 *     cpdef _compute(self)
 */
struct __pyx_opt_args_5asynq_8batching_9BatchBase_cancel {
  int __pyx_n;
  PyObject *error;
};

/* "batching.pxd":43
 *     cpdef _try_switch_active_batch(self)
 * 
 *     cpdef dump(self, int indent=?)             # <<<<<<<<<<<<<<
 * 
 * cdef class BatchItemBase(futures.FutureBase):
 */
struct __pyx_opt_args_5asynq_8batching_9BatchBase_dump {
  int __pyx_n;
  int indent;
};

/* "batching.pxd":66
 * cdef object _debug_batch_state
 * 
 * cpdef sync(tag=?)             # <<<<<<<<<<<<<<
 */
struct __pyx_opt_args_5asynq_8batching_sync {
  int __pyx_n;
  PyObject *tag;
};
struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_start;
struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_flush_batches;
struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler__continue_with_batch;
struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_dump;
struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_try_time_based_dump;

/* "scheduler.pxd":45
 *     cpdef reset(self)
 * 
 *     cpdef async_task.AsyncTask start(self, async_task.AsyncTask task,             # <<<<<<<<<<<<<<
 *             bint run_immediately=?)
 *     cpdef async_task.AsyncTask continue_with(self, futures.FutureBase future, async_task.AsyncTask task)
 */
struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_start {
  int __pyx_n;
  int run_immediately;
};

/* "scheduler.pxd":48
 *             bint run_immediately=?)
 *     cpdef async_task.AsyncTask continue_with(self, futures.FutureBase future, async_task.AsyncTask task)
 *     cpdef int flush_batches(self, bint must_await=?) except -1             # <<<<<<<<<<<<<<
 * 
 *     cpdef add_dependencies(self, async_task.AsyncTask task, object yield_result)
 */
struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_flush_batches {
  int __pyx_n;
  int must_await;
};

/* "scheduler.pxd":76
 *     @cython.locals(dump_continue_task=bint, task=async_task.AsyncTask)
 *     cdef async_task.AsyncTask _continue_with_task(self)
 *     cdef batching.BatchBase _continue_with_batch(self, bint assert_no_batch=?)             # <<<<<<<<<<<<<<
 * 
 *     cpdef batching.BatchBase _select_batch_to_flush(self)
 */
struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler__continue_with_batch {
  int __pyx_n;
  int assert_no_batch;
};

/* "scheduler.pxd":84
 *     cpdef _accept_changes(self, TaskScheduler clone)
 * 
 *     cpdef dump(self, int indent=?)             # <<<<<<<<<<<<<<
 *     @cython.locals(current_time=float)
 *     cpdef try_time_based_dump(self, object last_task=?)
 */
struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_dump {
  int __pyx_n;
  int indent;
};

/* "scheduler.pxd":86
 *     cpdef dump(self, int indent=?)
 *     @cython.locals(current_time=float)
 *     cpdef try_time_based_dump(self, object last_task=?)             # <<<<<<<<<<<<<<
 * 
 * cdef class TaskSchedulerActivator(object):
 */
struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_try_time_based_dump {
  int __pyx_n;
  PyObject *last_task;
};
struct __pyx_opt_args_5asynq_10async_task_9AsyncTask_start;
struct __pyx_opt_args_5asynq_10async_task_9AsyncTask_dump;

/* "async_task.pxd":53
 * 
 *     @cython.locals(s=scheduler.TaskScheduler)
 *     cpdef AsyncTask start(self, bint run_immediately=?)             # <<<<<<<<<<<<<<
 *     @cython.locals(s=scheduler.TaskScheduler)
 *     cpdef AsyncTask after(self, futures.FutureBase future)
 */
struct __pyx_opt_args_5asynq_10async_task_9AsyncTask_start {
  int __pyx_n;
  int run_immediately;
};

/* "async_task.pxd":84
 *     cpdef list traceback(self)
 * 
 *     cpdef dump(self, int indent=?)             # <<<<<<<<<<<<<<
 * 
 *     # Contexts support
 */
struct __pyx_opt_args_5asynq_10async_task_9AsyncTask_dump {
  int __pyx_n;
  int indent;
};

/* "qcore/events.pxd":15
 * # limitations under the License.
 * 
 * cdef class EventHook(object):             # <<<<<<<<<<<<<<
 *     cdef list handlers
 * 
 */
struct __pyx_obj_5qcore_6events_EventHook {
  PyObject_HEAD
  PyObject *handlers;
};


/* "qcore/events.pxd":19
 * 
 * 
 * cdef class SinkingEventHook(EventHook):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_5qcore_6events_SinkingEventHook {
  struct __pyx_obj_5qcore_6events_EventHook __pyx_base;
};


/* "qcore/events.pxd":25
 * 
 * 
 * cdef class EventInterceptor(object):             # <<<<<<<<<<<<<<
 *     cdef object source
 *     cdef dict events
 */
struct __pyx_obj_5qcore_6events_EventInterceptor {
  PyObject_HEAD
  PyObject *source;
  PyObject *events;
};


/* "qcore/helpers.pxd":24
 * 
 * 
 * cdef class MarkerObject(object):             # <<<<<<<<<<<<<<
 *     cpdef unicode name
 * 
 */
struct __pyx_obj_5qcore_7helpers_MarkerObject {
  PyObject_HEAD
  PyObject *name;
};


/* "qcore/helpers.pxd":33
 * 
 * 
 * cdef class EmptyContext(object):             # <<<<<<<<<<<<<<
 *     cpdef __enter__(self)
 *     cpdef __exit__(self, exc_type, exc_val, exc_tb)
 */
struct __pyx_obj_5qcore_7helpers_EmptyContext {
  PyObject_HEAD
  struct __pyx_vtabstruct_5qcore_7helpers_EmptyContext *__pyx_vtab;
};


/* "qcore/helpers.pxd":40
 * 
 * 
 * cdef class CythonCachedHashWrapper(object):             # <<<<<<<<<<<<<<
 *     cdef object _value
 *     cdef int _hash
 */
struct __pyx_obj_5qcore_7helpers_CythonCachedHashWrapper {
  PyObject_HEAD
  struct __pyx_vtabstruct_5qcore_7helpers_CythonCachedHashWrapper *__pyx_vtab;
  PyObject *_value;
  int _hash;
};


/* "qcore/helpers.pxd":52
 * cdef class _ScopedValueOverrideContext(object)  # Forward declaration
 * 
 * cdef class ScopedValue(object):             # <<<<<<<<<<<<<<
 *     cdef object _value
 * 
 */
struct __pyx_obj_5qcore_7helpers_ScopedValue {
  PyObject_HEAD
  struct __pyx_vtabstruct_5qcore_7helpers_ScopedValue *__pyx_vtab;
  PyObject *_value;
};


/* "qcore/helpers.pxd":50
 * 
 * 
 * cdef class _ScopedValueOverrideContext(object)  # Forward declaration             # <<<<<<<<<<<<<<
 * 
 * cdef class ScopedValue(object):
 */
struct __pyx_obj_5qcore_7helpers__ScopedValueOverrideContext {
  PyObject_HEAD
  struct __pyx_obj_5qcore_7helpers_ScopedValue *_target;
  PyObject *_value;
  PyObject *_old_value;
};


/* "qcore/helpers.pxd":65
 * 
 * 
 * cdef class _PropertyOverrideContext(object):             # <<<<<<<<<<<<<<
 *     cdef object _target
 *     cdef object _property_name
 */
struct __pyx_obj_5qcore_7helpers__PropertyOverrideContext {
  PyObject_HEAD
  PyObject *_target;
  PyObject *_property_name;
  PyObject *_value;
  PyObject *_old_value;
};


/* "_debug.pxd":18
 * 
 * 
 * cdef class DebugOptions(object):             # <<<<<<<<<<<<<<
 *     cdef public bint DUMP_PRE_ERROR_STATE
 *     cdef public bint DUMP_EXCEPTIONS
 */
struct __pyx_obj_5asynq_6_debug_DebugOptions {
  PyObject_HEAD
  struct __pyx_vtabstruct_5asynq_6_debug_DebugOptions *__pyx_vtab;
  int DUMP_PRE_ERROR_STATE;
  int DUMP_EXCEPTIONS;
  int DUMP_AWAIT_RECURSION;
  int DUMP_SCHEDULE_TASK;
  int DUMP_CONTINUE_TASK;
  int DUMP_SCHEDULE_BATCH;
  int DUMP_FLUSH_BATCH;
  int DUMP_DEPENDENCIES;
  int DUMP_COMPUTED;
  int DUMP_NEW_TASKS;
  int DUMP_YIELD_RESULTS;
  int DUMP_QUEUED_RESULTS;
  int DUMP_CONTEXTS;
  int DUMP_SCHEDULER_CHANGE;
  int DUMP_SYNC;
  int DUMP_PRIMER;
  int DUMP_STACK;
  int DUMP_SCHEDULER_STATE;
  float SCHEDULER_STATE_DUMP_INTERVAL;
  int DEBUG_STR_REPR_MAX_LENGTH;
  PyObject *STACK_DUMP_LIMIT;
  PyObject *ENABLE_COMPLEX_ASSERTIONS;
};


/* "futures.pxd":26
 * 
 * 
 * cdef class FutureBase(object):             # <<<<<<<<<<<<<<
 *     cdef public object _value
 *     cdef public object _error
 */
struct __pyx_obj_5asynq_7futures_FutureBase {
  PyObject_HEAD
  struct __pyx_vtabstruct_5asynq_7futures_FutureBase *__pyx_vtab;
  PyObject *_value;
  PyObject *_error;
  int _in_repr;
  struct __pyx_obj_5qcore_6events_EventHook *on_computed;
};


/* "futures.pxd":49
 * 
 * 
 * cdef class Future(FutureBase):             # <<<<<<<<<<<<<<
 *     cdef public object _value_provider
 *     cpdef _compute(self)
 */
struct __pyx_obj_5asynq_7futures_Future {
  struct __pyx_obj_5asynq_7futures_FutureBase __pyx_base;
  PyObject *_value_provider;
};


/* "futures.pxd":54
 * 
 * 
 * cdef class ConstFuture(FutureBase):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_5asynq_7futures_ConstFuture {
  struct __pyx_obj_5asynq_7futures_FutureBase __pyx_base;
};


/* "futures.pxd":57
 *     pass
 * 
 * cdef class ErrorFuture(FutureBase):             # <<<<<<<<<<<<<<
 *     pass
 */
struct __pyx_obj_5asynq_7futures_ErrorFuture {
  struct __pyx_obj_5asynq_7futures_FutureBase __pyx_base;
};


/* "batching.pxd":26
 * 
 * 
 * cdef class BatchBase(futures.FutureBase):             # <<<<<<<<<<<<<<
 *     cdef public list items
 * 
 */
struct __pyx_obj_5asynq_8batching_BatchBase {
  struct __pyx_obj_5asynq_7futures_FutureBase __pyx_base;
  PyObject *items;
};


/* "batching.pxd":45
 *     cpdef dump(self, int indent=?)
 * 
 * cdef class BatchItemBase(futures.FutureBase):             # <<<<<<<<<<<<<<
 *     cdef public BatchBase batch
 *     cdef public long index
 */
struct __pyx_obj_5asynq_8batching_BatchItemBase {
  struct __pyx_obj_5asynq_7futures_FutureBase __pyx_base;
  struct __pyx_obj_5asynq_8batching_BatchBase *batch;
  long index;
};


/* "batching.pxd":53
 * 
 * 
 * cdef class DebugBatchItem(BatchItemBase):             # <<<<<<<<<<<<<<
 *     cdef public object _result
 * 
 */
struct __pyx_obj_5asynq_8batching_DebugBatchItem {
  struct __pyx_obj_5asynq_8batching_BatchItemBase __pyx_base;
  PyObject *_result;
};


/* "batching.pxd":56
 *     cdef public object _result
 * 
 * cdef class DebugBatch(BatchBase):             # <<<<<<<<<<<<<<
 *     cdef public str name
 *     cdef public long index
 */
struct __pyx_obj_5asynq_8batching_DebugBatch {
  struct __pyx_obj_5asynq_8batching_BatchBase __pyx_base;
  PyObject *name;
  long index;
};


/* "scheduler.pxd":29
 * 
 * 
 * cdef class TaskScheduler(object):             # <<<<<<<<<<<<<<
 *     cdef public set _empty_set
 *     cdef public float _last_dump_time
 */
struct __pyx_obj_5asynq_9scheduler_TaskScheduler {
  PyObject_HEAD
  struct __pyx_vtabstruct_5asynq_9scheduler_TaskScheduler *__pyx_vtab;
  PyObject *_empty_set;
  float _last_dump_time;
  PyObject *_new_tasks;
  PyObject *_tasks;
  PyObject *_batches;
  int await_recursion_depth;
  int max_await_recursion_depth;
  struct __pyx_obj_5qcore_6events_EventHook *on_before_batch_flush;
  struct __pyx_obj_5qcore_6events_EventHook *on_after_batch_flush;
  struct __pyx_obj_5asynq_10async_task_AsyncTask *active_task;
  PyObject *name;
};


/* "scheduler.pxd":88
 *     cpdef try_time_based_dump(self, object last_task=?)
 * 
 * cdef class TaskSchedulerActivator(object):             # <<<<<<<<<<<<<<
 *     cdef TaskScheduler _scheduler
 *     cdef TaskScheduler _old_scheduler
 */
struct __pyx_obj_5asynq_9scheduler_TaskSchedulerActivator {
  PyObject_HEAD
  struct __pyx_obj_5asynq_9scheduler_TaskScheduler *_scheduler;
  struct __pyx_obj_5asynq_9scheduler_TaskScheduler *_old_scheduler;
  int _must_await_on_exit;
  int _must_flush_batches_on_exit;
};


/* "async_task.pxd":31
 * 
 * 
 * cdef class AsyncTask(futures.FutureBase):             # <<<<<<<<<<<<<<
 *     cdef public bint is_scheduled
 *     cdef public long iteration_index
 */
struct __pyx_obj_5asynq_10async_task_AsyncTask {
  struct __pyx_obj_5asynq_7futures_FutureBase __pyx_base;
  int is_scheduled;
  long iteration_index;
  int group_cancel;
  PyObject *fn;
  PyObject *args;
  PyObject *kwargs;
  struct __pyx_obj_5asynq_10async_task_AsyncTask *caller;
  int depth;
  int max_depth;
  struct __pyx_obj_5asynq_9scheduler_TaskScheduler *scheduler;
  struct __pyx_obj_5asynq_10async_task_AsyncTask *creator;
  PyObject *_generator;
  PyObject *_last_value;
  PyObject *_frame_info;
  PyObject *_dependencies;
  PyObject *_contexts;
};


/* "asynq/contexts.pxd":25
 * 
 * 
 * cdef class NonAsyncContext(object):             # <<<<<<<<<<<<<<
 *     cpdef NonAsyncContext __enter__(self)
 *     cpdef __exit__(self, ty, val, tb)
 */
struct __pyx_obj_5asynq_8contexts_NonAsyncContext {
  PyObject_HEAD
  struct __pyx_vtabstruct_5asynq_8contexts_NonAsyncContext *__pyx_vtab;
};


/* "asynq/contexts.pxd":31
 *     cpdef __resume__(self)
 * 
 * cdef class AsyncContext(object):             # <<<<<<<<<<<<<<
 *     cdef public object _active_task
 *     cdef public bint _is_active
 */
struct __pyx_obj_5asynq_8contexts_AsyncContext {
  PyObject_HEAD
  struct __pyx_vtabstruct_5asynq_8contexts_AsyncContext *__pyx_vtab;
  PyObject *_active_task;
  int _is_active;
};



/* "qcore/helpers.pxd":33
 * 
 * 
 * cdef class EmptyContext(object):             # <<<<<<<<<<<<<<
 *     cpdef __enter__(self)
 *     cpdef __exit__(self, exc_type, exc_val, exc_tb)
 */

struct __pyx_vtabstruct_5qcore_7helpers_EmptyContext {
  PyObject *(*__pyx___enter__)(struct __pyx_obj_5qcore_7helpers_EmptyContext *, int __pyx_skip_dispatch);
  PyObject *(*__pyx___exit__)(struct __pyx_obj_5qcore_7helpers_EmptyContext *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5qcore_7helpers_EmptyContext *__pyx_vtabptr_5qcore_7helpers_EmptyContext;


/* "qcore/helpers.pxd":40
 * 
 * 
 * cdef class CythonCachedHashWrapper(object):             # <<<<<<<<<<<<<<
 *     cdef object _value
 *     cdef int _hash
 */

struct __pyx_vtabstruct_5qcore_7helpers_CythonCachedHashWrapper {
  PyObject *(*value)(struct __pyx_obj_5qcore_7helpers_CythonCachedHashWrapper *, int __pyx_skip_dispatch);
  PyObject *(*hash)(struct __pyx_obj_5qcore_7helpers_CythonCachedHashWrapper *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5qcore_7helpers_CythonCachedHashWrapper *__pyx_vtabptr_5qcore_7helpers_CythonCachedHashWrapper;


/* "qcore/helpers.pxd":52
 * cdef class _ScopedValueOverrideContext(object)  # Forward declaration
 * 
 * cdef class ScopedValue(object):             # <<<<<<<<<<<<<<
 *     cdef object _value
 * 
 */

struct __pyx_vtabstruct_5qcore_7helpers_ScopedValue {
  PyObject *(*get)(struct __pyx_obj_5qcore_7helpers_ScopedValue *, int __pyx_skip_dispatch);
  PyObject *(*set)(struct __pyx_obj_5qcore_7helpers_ScopedValue *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*override)(struct __pyx_obj_5qcore_7helpers_ScopedValue *, PyObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5qcore_7helpers_ScopedValue *__pyx_vtabptr_5qcore_7helpers_ScopedValue;


/* "_debug.pxd":18
 * 
 * 
 * cdef class DebugOptions(object):             # <<<<<<<<<<<<<<
 *     cdef public bint DUMP_PRE_ERROR_STATE
 *     cdef public bint DUMP_EXCEPTIONS
 */

struct __pyx_vtabstruct_5asynq_6_debug_DebugOptions {
  PyObject *(*DUMP_ALL)(struct __pyx_obj_5asynq_6_debug_DebugOptions *, int __pyx_skip_dispatch, struct __pyx_opt_args_5asynq_6_debug_12DebugOptions_DUMP_ALL *__pyx_optional_args);
};
static struct __pyx_vtabstruct_5asynq_6_debug_DebugOptions *__pyx_vtabptr_5asynq_6_debug_DebugOptions;


/* "futures.pxd":26
 * 
 * 
 * cdef class FutureBase(object):             # <<<<<<<<<<<<<<
 *     cdef public object _value
 *     cdef public object _error
 */

struct __pyx_vtabstruct_5asynq_7futures_FutureBase {
  PyObject *(*value)(struct __pyx_obj_5asynq_7futures_FutureBase *, int __pyx_skip_dispatch);
  PyObject *(*set_value)(struct __pyx_obj_5asynq_7futures_FutureBase *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*reset_unsafe)(struct __pyx_obj_5asynq_7futures_FutureBase *, int __pyx_skip_dispatch);
  PyObject *(*error)(struct __pyx_obj_5asynq_7futures_FutureBase *, int __pyx_skip_dispatch);
  PyObject *(*set_error)(struct __pyx_obj_5asynq_7futures_FutureBase *, PyObject *, int __pyx_skip_dispatch);
  int (*is_computed)(struct __pyx_obj_5asynq_7futures_FutureBase *, int __pyx_skip_dispatch);
  PyObject *(*_compute)(struct __pyx_obj_5asynq_7futures_FutureBase *, int __pyx_skip_dispatch);
  PyObject *(*_computed)(struct __pyx_obj_5asynq_7futures_FutureBase *, int __pyx_skip_dispatch);
  PyObject *(*make_dependency)(struct __pyx_obj_5asynq_7futures_FutureBase *, PyObject *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*raise_if_error)(struct __pyx_obj_5asynq_7futures_FutureBase *);
  PyObject *(*dump)(struct __pyx_obj_5asynq_7futures_FutureBase *, int __pyx_skip_dispatch, struct __pyx_opt_args_5asynq_7futures_10FutureBase_dump *__pyx_optional_args);
};
static struct __pyx_vtabstruct_5asynq_7futures_FutureBase *__pyx_vtabptr_5asynq_7futures_FutureBase;


/* "futures.pxd":49
 * 
 * 
 * cdef class Future(FutureBase):             # <<<<<<<<<<<<<<
 *     cdef public object _value_provider
 *     cpdef _compute(self)
 */

struct __pyx_vtabstruct_5asynq_7futures_Future {
  struct __pyx_vtabstruct_5asynq_7futures_FutureBase __pyx_base;
};
static struct __pyx_vtabstruct_5asynq_7futures_Future *__pyx_vtabptr_5asynq_7futures_Future;


/* "futures.pxd":54
 * 
 * 
 * cdef class ConstFuture(FutureBase):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_5asynq_7futures_ConstFuture {
  struct __pyx_vtabstruct_5asynq_7futures_FutureBase __pyx_base;
};
static struct __pyx_vtabstruct_5asynq_7futures_ConstFuture *__pyx_vtabptr_5asynq_7futures_ConstFuture;


/* "futures.pxd":57
 *     pass
 * 
 * cdef class ErrorFuture(FutureBase):             # <<<<<<<<<<<<<<
 *     pass
 */

struct __pyx_vtabstruct_5asynq_7futures_ErrorFuture {
  struct __pyx_vtabstruct_5asynq_7futures_FutureBase __pyx_base;
};
static struct __pyx_vtabstruct_5asynq_7futures_ErrorFuture *__pyx_vtabptr_5asynq_7futures_ErrorFuture;


/* "batching.pxd":26
 * 
 * 
 * cdef class BatchBase(futures.FutureBase):             # <<<<<<<<<<<<<<
 *     cdef public list items
 * 
 */

struct __pyx_vtabstruct_5asynq_8batching_BatchBase {
  struct __pyx_vtabstruct_5asynq_7futures_FutureBase __pyx_base;
  int (*is_flushed)(struct __pyx_obj_5asynq_8batching_BatchBase *, int __pyx_skip_dispatch);
  int (*is_cancelled)(struct __pyx_obj_5asynq_8batching_BatchBase *, int __pyx_skip_dispatch);
  int (*is_empty)(struct __pyx_obj_5asynq_8batching_BatchBase *, int __pyx_skip_dispatch);
  PyObject *(*get_priority)(struct __pyx_obj_5asynq_8batching_BatchBase *, int __pyx_skip_dispatch);
  PyObject *(*flush)(struct __pyx_obj_5asynq_8batching_BatchBase *, int __pyx_skip_dispatch);
  PyObject *(*cancel)(struct __pyx_obj_5asynq_8batching_BatchBase *, int __pyx_skip_dispatch, struct __pyx_opt_args_5asynq_8batching_9BatchBase_cancel *__pyx_optional_args);
  PyObject *(*_flush)(struct __pyx_obj_5asynq_8batching_BatchBase *, int __pyx_skip_dispatch);
  PyObject *(*_cancel)(struct __pyx_obj_5asynq_8batching_BatchBase *, int __pyx_skip_dispatch);
  PyObject *(*_try_switch_active_batch)(struct __pyx_obj_5asynq_8batching_BatchBase *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5asynq_8batching_BatchBase *__pyx_vtabptr_5asynq_8batching_BatchBase;


/* "batching.pxd":45
 *     cpdef dump(self, int indent=?)
 * 
 * cdef class BatchItemBase(futures.FutureBase):             # <<<<<<<<<<<<<<
 *     cdef public BatchBase batch
 *     cdef public long index
 */

struct __pyx_vtabstruct_5asynq_8batching_BatchItemBase {
  struct __pyx_vtabstruct_5asynq_7futures_FutureBase __pyx_base;
};
static struct __pyx_vtabstruct_5asynq_8batching_BatchItemBase *__pyx_vtabptr_5asynq_8batching_BatchItemBase;


/* "batching.pxd":53
 * 
 * 
 * cdef class DebugBatchItem(BatchItemBase):             # <<<<<<<<<<<<<<
 *     cdef public object _result
 * 
 */

struct __pyx_vtabstruct_5asynq_8batching_DebugBatchItem {
  struct __pyx_vtabstruct_5asynq_8batching_BatchItemBase __pyx_base;
};
static struct __pyx_vtabstruct_5asynq_8batching_DebugBatchItem *__pyx_vtabptr_5asynq_8batching_DebugBatchItem;


/* "batching.pxd":56
 *     cdef public object _result
 * 
 * cdef class DebugBatch(BatchBase):             # <<<<<<<<<<<<<<
 *     cdef public str name
 *     cdef public long index
 */

struct __pyx_vtabstruct_5asynq_8batching_DebugBatch {
  struct __pyx_vtabstruct_5asynq_8batching_BatchBase __pyx_base;
};
static struct __pyx_vtabstruct_5asynq_8batching_DebugBatch *__pyx_vtabptr_5asynq_8batching_DebugBatch;


/* "scheduler.pxd":29
 * 
 * 
 * cdef class TaskScheduler(object):             # <<<<<<<<<<<<<<
 *     cdef public set _empty_set
 *     cdef public float _last_dump_time
 */

struct __pyx_vtabstruct_5asynq_9scheduler_TaskScheduler {
  struct __pyx_obj_5asynq_9scheduler_TaskSchedulerActivator *(*activate)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, int, int, int __pyx_skip_dispatch);
  PyObject *(*reset)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, int __pyx_skip_dispatch);
  struct __pyx_obj_5asynq_10async_task_AsyncTask *(*start)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_10async_task_AsyncTask *, int __pyx_skip_dispatch, struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_start *__pyx_optional_args);
  struct __pyx_obj_5asynq_10async_task_AsyncTask *(*continue_with)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_7futures_FutureBase *, struct __pyx_obj_5asynq_10async_task_AsyncTask *, int __pyx_skip_dispatch);
  int (*flush_batches)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, int __pyx_skip_dispatch, struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_flush_batches *__pyx_optional_args);
  PyObject *(*add_dependencies)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_10async_task_AsyncTask *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*add_dependency)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_10async_task_AsyncTask *, struct __pyx_obj_5asynq_7futures_FutureBase *, int __pyx_skip_dispatch);
  PyObject *(*schedule)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_10async_task_AsyncTask *, int __pyx_skip_dispatch);
  PyObject *(*schedule_batch)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_8batching_BatchBase *, int __pyx_skip_dispatch);
  int (*_await)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, PyObject *, int __pyx_skip_dispatch);
  int (*_execute)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, int, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*_try_execute_on_new_scheduler)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, PyObject *, int __pyx_skip_dispatch);
  int (*_schedule)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_10async_task_AsyncTask *);
  int (*_schedule_without_checks)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_10async_task_AsyncTask *);
  int (*_try_schedule)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_10async_task_AsyncTask *, int);
  int (*_schedule_batch)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_8batching_BatchBase *);
  int (*_flush_batch)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_8batching_BatchBase *);
  PyObject *(*_enqueue_new_tasks)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *);
  struct __pyx_obj_5asynq_10async_task_AsyncTask *(*_continue_with_task)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *);
  struct __pyx_obj_5asynq_8batching_BatchBase *(*_continue_with_batch)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler__continue_with_batch *__pyx_optional_args);
  struct __pyx_obj_5asynq_8batching_BatchBase *(*_select_batch_to_flush)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, int __pyx_skip_dispatch);
  PyObject *(*_clone)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, int __pyx_skip_dispatch);
  PyObject *(*_accept_changes)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, int __pyx_skip_dispatch);
  PyObject *(*dump)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, int __pyx_skip_dispatch, struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_dump *__pyx_optional_args);
  PyObject *(*try_time_based_dump)(struct __pyx_obj_5asynq_9scheduler_TaskScheduler *, int __pyx_skip_dispatch, struct __pyx_opt_args_5asynq_9scheduler_13TaskScheduler_try_time_based_dump *__pyx_optional_args);
};
static struct __pyx_vtabstruct_5asynq_9scheduler_TaskScheduler *__pyx_vtabptr_5asynq_9scheduler_TaskScheduler;


/* "async_task.pxd":31
 * 
 * 
 * cdef class AsyncTask(futures.FutureBase):             # <<<<<<<<<<<<<<
 *     cdef public bint is_scheduled
 *     cdef public long iteration_index
 */

struct __pyx_vtabstruct_5asynq_10async_task_AsyncTask {
  struct __pyx_vtabstruct_5asynq_7futures_FutureBase __pyx_base;
  int (*is_blocked)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, int __pyx_skip_dispatch);
  int (*can_continue)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, int __pyx_skip_dispatch);
  struct __pyx_obj_5asynq_10async_task_AsyncTask *(*start)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, int __pyx_skip_dispatch, struct __pyx_opt_args_5asynq_10async_task_9AsyncTask_start *__pyx_optional_args);
  struct __pyx_obj_5asynq_10async_task_AsyncTask *(*after)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, struct __pyx_obj_5asynq_7futures_FutureBase *, int __pyx_skip_dispatch);
  PyObject *(*cancel_dependencies)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*_continue)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, int __pyx_skip_dispatch);
  PyObject *(*_continue_on_generator)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, PyObject *, PyObject *);
  PyObject *(*_accept_yield_result)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, PyObject *);
  PyObject *(*_accept_error)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, PyObject *);
  PyObject *(*_queue_exit)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*_queue_throw_error)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*_remove_dependency_cython)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, PyObject *);
  PyObject *(*_before_continue)(struct __pyx_obj_5asynq_10async_task_AsyncTask *);
  PyObject *(*_after_continue)(struct __pyx_obj_5asynq_10async_task_AsyncTask *);
  PyObject *(*traceback)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, int __pyx_skip_dispatch);
  PyObject *(*_enter_context)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, PyObject *);
  PyObject *(*_leave_context)(struct __pyx_obj_5asynq_10async_task_AsyncTask *, PyObject *);
  PyObject *(*_pause_contexts)(struct __pyx_obj_5asynq_10async_task_AsyncTask *);
  PyObject *(*_resume_contexts)(struct __pyx_obj_5asynq_10async_task_AsyncTask *);
};
static struct __pyx_vtabstruct_5asynq_10async_task_AsyncTask *__pyx_vtabptr_5asynq_10async_task_AsyncTask;


/* "asynq/contexts.py":18
 * 
 * 
 * class NonAsyncContext(object):             # <<<<<<<<<<<<<<
 *     """Indicates that context can't contain yield statements.
 * 
 */

struct __pyx_vtabstruct_5asynq_8contexts_NonAsyncContext {
  struct __pyx_obj_5asynq_8contexts_NonAsyncContext *(*__pyx___enter__)(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *, int __pyx_skip_dispatch);
  PyObject *(*__pyx___exit__)(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*__pyx___pause__)(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *, int __pyx_skip_dispatch);
  PyObject *(*__pyx___resume__)(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5asynq_8contexts_NonAsyncContext *__pyx_vtabptr_5asynq_8contexts_NonAsyncContext;


/* "asynq/contexts.py":56
 * 
 * 
 * class AsyncContext(object):             # <<<<<<<<<<<<<<
 *     """Base class for contexts that should pause and resume during an async's function execution.
 * 
 */

struct __pyx_vtabstruct_5asynq_8contexts_AsyncContext {
  struct __pyx_obj_5asynq_8contexts_AsyncContext *(*__pyx___enter__)(struct __pyx_obj_5asynq_8contexts_AsyncContext *, int __pyx_skip_dispatch);
  PyObject *(*__pyx___exit__)(struct __pyx_obj_5asynq_8contexts_AsyncContext *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*__pyx___pause__)(struct __pyx_obj_5asynq_8contexts_AsyncContext *, int __pyx_skip_dispatch);
  PyObject *(*__pyx___resume__)(struct __pyx_obj_5asynq_8contexts_AsyncContext *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5asynq_8contexts_AsyncContext *__pyx_vtabptr_5asynq_8contexts_AsyncContext;

/* --- 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_COMPILING_IN_CPYTHON
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);
}
#else
#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
#endif

/* GetBuiltinName.proto */
static PyObject *__Pyx_GetBuiltinName(PyObject *name);

/* PyObjectCall.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
#else
#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
#endif

/* PyObjectCallMethO.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
#endif

/* PyObjectCallOneArg.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);

/* PyObjectCallNoArg.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
#else
#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)
#endif

/* ExtTypeTest.proto */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);

/* PyObjectSetAttrStr.proto */
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL)
static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_setattro))
        return tp->tp_setattro(obj, attr_name, value);
#if PY_MAJOR_VERSION < 3
    if (likely(tp->tp_setattr))
        return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value);
#endif
    return PyObject_SetAttr(obj, attr_name, value);
}
#else
#define __Pyx_PyObject_DelAttrStr(o,n)   PyObject_DelAttr(o,n)
#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
#endif

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

/* GetModuleGlobalName.proto */
static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name);

/* ArgTypeTest.proto */
static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
    const char *name, int exact);

/* PyThreadStateGet.proto */
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
#define __Pyx_PyThreadState_assign  __pyx_tstate = PyThreadState_GET();
#else
#define __Pyx_PyThreadState_declare
#define __Pyx_PyThreadState_assign
#endif

/* PyErrFetchRestore.proto */
#if CYTHON_COMPILING_IN_CPYTHON
#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);
#else
#define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)
#endif

/* RaiseException.proto */
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);

/* SetVTable.proto */
static int __Pyx_SetVtable(PyObject *dict, void *vtable);

/* GetVTable.proto */
static void* __Pyx_GetVtable(PyObject *dict);

/* Import.proto */
static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);

/* ImportFrom.proto */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);

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

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

/* CheckBinaryVersion.proto */
static int __Pyx_check_binary_version(void);

/* FunctionExport.proto */
static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig);

/* PyIdentifierFromString.proto */
#if !defined(__Pyx_PyIdentifier_FromString)
#if PY_MAJOR_VERSION < 3
  #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
#else
  #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s)
#endif
#endif

/* ModuleImport.proto */
static PyObject *__Pyx_ImportModule(const char *name);

/* TypeImport.proto */
static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);

/* VoidPtrImport.proto */
static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig);

/* InitStrings.proto */
static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);

static struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_f_5asynq_8contexts_15NonAsyncContext___enter__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
static PyObject *__pyx_f_5asynq_8contexts_15NonAsyncContext___exit__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_typ, CYTHON_UNUSED PyObject *__pyx_v_val, CYTHON_UNUSED PyObject *__pyx_v_tb, int __pyx_skip_dispatch); /* proto*/
static PyObject *__pyx_f_5asynq_8contexts_15NonAsyncContext___pause__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
static PyObject *__pyx_f_5asynq_8contexts_15NonAsyncContext___resume__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
static struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_f_5asynq_8contexts_12AsyncContext___enter__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
static PyObject *__pyx_f_5asynq_8contexts_12AsyncContext___exit__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ty, CYTHON_UNUSED PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v_tb, int __pyx_skip_dispatch); /* proto*/
static PyObject *__pyx_f_5asynq_8contexts_12AsyncContext___resume__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
static PyObject *__pyx_f_5asynq_8contexts_12AsyncContext___pause__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/

/* Module declarations from 'cython' */

/* 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.version' */

/* Module declarations from 'cpython.exc' */

/* Module declarations from 'cpython.module' */

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

/* Module declarations from 'cpython.tuple' */

/* Module declarations from 'cpython.list' */

/* Module declarations from 'cpython.sequence' */

/* Module declarations from 'cpython.mapping' */

/* Module declarations from 'cpython.iterator' */

/* Module declarations from 'cpython.number' */

/* Module declarations from 'cpython.int' */

/* Module declarations from '__builtin__' */

/* Module declarations from 'cpython.bool' */
static PyTypeObject *__pyx_ptype_7cpython_4bool_bool = 0;

/* Module declarations from 'cpython.long' */

/* Module declarations from 'cpython.float' */

/* Module declarations from '__builtin__' */

/* Module declarations from 'cpython.complex' */
static PyTypeObject *__pyx_ptype_7cpython_7complex_complex = 0;

/* Module declarations from 'cpython.string' */

/* Module declarations from 'cpython.unicode' */

/* Module declarations from 'cpython.dict' */

/* Module declarations from 'cpython.instance' */

/* Module declarations from 'cpython.function' */

/* Module declarations from 'cpython.method' */

/* Module declarations from 'cpython.weakref' */

/* Module declarations from 'cpython.getargs' */

/* Module declarations from 'cpython.pythread' */

/* Module declarations from 'cpython.pystate' */

/* Module declarations from 'cpython.cobject' */

/* Module declarations from 'cpython.oldbuffer' */

/* Module declarations from 'cpython.set' */

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

/* Module declarations from 'cpython.bytes' */

/* Module declarations from 'cpython.pycapsule' */

/* Module declarations from 'cpython' */

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

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

/* Module declarations from 'qcore.events' */
static PyTypeObject *__pyx_ptype_5qcore_6events_EventHook = 0;
static PyTypeObject *__pyx_ptype_5qcore_6events_SinkingEventHook = 0;
static PyTypeObject *__pyx_ptype_5qcore_6events_EventInterceptor = 0;
static struct __pyx_obj_5qcore_6events_SinkingEventHook **__pyx_vp_5qcore_6events_sinking_event_hook = 0;
#define __pyx_v_5qcore_6events_sinking_event_hook (*__pyx_vp_5qcore_6events_sinking_event_hook)

/* Module declarations from 'qcore.helpers' */
static PyTypeObject *__pyx_ptype_5qcore_7helpers_MarkerObject = 0;
static PyTypeObject *__pyx_ptype_5qcore_7helpers_EmptyContext = 0;
static PyTypeObject *__pyx_ptype_5qcore_7helpers_CythonCachedHashWrapper = 0;
static PyTypeObject *__pyx_ptype_5qcore_7helpers__ScopedValueOverrideContext = 0;
static PyTypeObject *__pyx_ptype_5qcore_7helpers_ScopedValue = 0;
static PyTypeObject *__pyx_ptype_5qcore_7helpers__PropertyOverrideContext = 0;
static PyObject **__pyx_vp_5qcore_7helpers_empty_list = 0;
#define __pyx_v_5qcore_7helpers_empty_list (*__pyx_vp_5qcore_7helpers_empty_list)
static PyObject **__pyx_vp_5qcore_7helpers_empty_tuple = 0;
#define __pyx_v_5qcore_7helpers_empty_tuple (*__pyx_vp_5qcore_7helpers_empty_tuple)
static PyObject **__pyx_vp_5qcore_7helpers_empty_dict = 0;
#define __pyx_v_5qcore_7helpers_empty_dict (*__pyx_vp_5qcore_7helpers_empty_dict)
static struct __pyx_obj_5qcore_7helpers_MarkerObject **__pyx_vp_5qcore_7helpers_none = 0;
#define __pyx_v_5qcore_7helpers_none (*__pyx_vp_5qcore_7helpers_none)
static struct __pyx_obj_5qcore_7helpers_MarkerObject **__pyx_vp_5qcore_7helpers_miss = 0;
#define __pyx_v_5qcore_7helpers_miss (*__pyx_vp_5qcore_7helpers_miss)
static struct __pyx_obj_5qcore_7helpers_MarkerObject **__pyx_vp_5qcore_7helpers_same = 0;
#define __pyx_v_5qcore_7helpers_same (*__pyx_vp_5qcore_7helpers_same)
static struct __pyx_obj_5qcore_7helpers_MarkerObject **__pyx_vp_5qcore_7helpers_unspecified = 0;
#define __pyx_v_5qcore_7helpers_unspecified (*__pyx_vp_5qcore_7helpers_unspecified)
static struct __pyx_obj_5qcore_7helpers_EmptyContext **__pyx_vp_5qcore_7helpers_empty_context = 0;
#define __pyx_v_5qcore_7helpers_empty_context (*__pyx_vp_5qcore_7helpers_empty_context)
static PyObject **__pyx_vp_5qcore_7helpers_CachedHashWrapper = 0;
#define __pyx_v_5qcore_7helpers_CachedHashWrapper (*__pyx_vp_5qcore_7helpers_CachedHashWrapper)
static PyObject **__pyx_vp_5qcore_7helpers_override = 0;
#define __pyx_v_5qcore_7helpers_override (*__pyx_vp_5qcore_7helpers_override)

/* Module declarations from 'qcore.inspection' */

/* Module declarations from 'asynq._debug' */
static PyTypeObject *__pyx_ptype_5asynq_6_debug_DebugOptions = 0;
static struct __pyx_obj_5asynq_6_debug_DebugOptions **__pyx_vp_5asynq_6_debug_options = 0;
#define __pyx_v_5asynq_6_debug_options (*__pyx_vp_5asynq_6_debug_options)

/* Module declarations from 'asynq.futures' */
static PyTypeObject *__pyx_ptype_5asynq_7futures_FutureBase = 0;
static PyTypeObject *__pyx_ptype_5asynq_7futures_Future = 0;
static PyTypeObject *__pyx_ptype_5asynq_7futures_ConstFuture = 0;
static PyTypeObject *__pyx_ptype_5asynq_7futures_ErrorFuture = 0;
static struct __pyx_obj_5asynq_6_debug_DebugOptions **__pyx_vp_5asynq_7futures__debug_options = 0;
#define __pyx_v_5asynq_7futures__debug_options (*__pyx_vp_5asynq_7futures__debug_options)
static struct __pyx_obj_5qcore_7helpers_MarkerObject **__pyx_vp_5asynq_7futures__none = 0;
#define __pyx_v_5asynq_7futures__none (*__pyx_vp_5asynq_7futures__none)

/* Module declarations from 'asynq.batching' */
static PyTypeObject *__pyx_ptype_5asynq_8batching_BatchBase = 0;
static PyTypeObject *__pyx_ptype_5asynq_8batching_BatchItemBase = 0;
static PyTypeObject *__pyx_ptype_5asynq_8batching_DebugBatchItem = 0;
static PyTypeObject *__pyx_ptype_5asynq_8batching_DebugBatch = 0;
static struct __pyx_obj_5asynq_6_debug_DebugOptions **__pyx_vp_5asynq_8batching__debug_options = 0;
#define __pyx_v_5asynq_8batching__debug_options (*__pyx_vp_5asynq_8batching__debug_options)
static PyObject **__pyx_vp_5asynq_8batching__debug_batch_state = 0;
#define __pyx_v_5asynq_8batching__debug_batch_state (*__pyx_vp_5asynq_8batching__debug_batch_state)

/* Module declarations from 'asynq.scheduler' */
static PyTypeObject *__pyx_ptype_5asynq_9scheduler_TaskScheduler = 0;
static PyTypeObject *__pyx_ptype_5asynq_9scheduler_TaskSchedulerActivator = 0;
static struct __pyx_obj_5asynq_6_debug_DebugOptions **__pyx_vp_5asynq_9scheduler__debug_options = 0;
#define __pyx_v_5asynq_9scheduler__debug_options (*__pyx_vp_5asynq_9scheduler__debug_options)
static PyObject **__pyx_vp_5asynq_9scheduler__futures_none = 0;
#define __pyx_v_5asynq_9scheduler__futures_none (*__pyx_vp_5asynq_9scheduler__futures_none)
static PyObject **__pyx_vp_5asynq_9scheduler__state = 0;
#define __pyx_v_5asynq_9scheduler__state (*__pyx_vp_5asynq_9scheduler__state)

/* Module declarations from 'asynq.async_task' */
static PyTypeObject *__pyx_ptype_5asynq_10async_task_AsyncTask = 0;
static struct __pyx_obj_5asynq_6_debug_DebugOptions **__pyx_vp_5asynq_10async_task__debug_options = 0;
#define __pyx_v_5asynq_10async_task__debug_options (*__pyx_vp_5asynq_10async_task__debug_options)
static PyObject **__pyx_vp_5asynq_10async_task__futures_none = 0;
#define __pyx_v_5asynq_10async_task__futures_none (*__pyx_vp_5asynq_10async_task__futures_none)
static PyObject **__pyx_vp_5asynq_10async_task__none_future = 0;
#define __pyx_v_5asynq_10async_task__none_future (*__pyx_vp_5asynq_10async_task__none_future)
static PyObject **__pyx_vp_5asynq_10async_task__empty_tuple = 0;
#define __pyx_v_5asynq_10async_task__empty_tuple (*__pyx_vp_5asynq_10async_task__empty_tuple)
static PyObject **__pyx_vp_5asynq_10async_task__empty_dictionary = 0;
#define __pyx_v_5asynq_10async_task__empty_dictionary (*__pyx_vp_5asynq_10async_task__empty_dictionary)

/* Module declarations from 'asynq.contexts' */
static PyTypeObject *__pyx_ptype_5asynq_8contexts_NonAsyncContext = 0;
static PyTypeObject *__pyx_ptype_5asynq_8contexts_AsyncContext = 0;
static struct __pyx_obj_5asynq_10async_task_AsyncTask *__pyx_f_5asynq_8contexts_enter_context(PyObject *, int __pyx_skip_dispatch); /*proto*/
static PyObject *__pyx_f_5asynq_8contexts_leave_context(PyObject *, struct __pyx_obj_5asynq_10async_task_AsyncTask *, int __pyx_skip_dispatch); /*proto*/
#define __Pyx_MODULE_NAME "asynq.contexts"
int __pyx_module_is_main_asynq__contexts = 0;

/* Implementation of 'asynq.contexts' */
static PyObject *__pyx_builtin_NotImplementedError;
static const char __pyx_k_[] = "";
static const char __pyx_k_tb[] = "tb";
static const char __pyx_k_ty[] = "ty";
static const char __pyx_k_typ[] = "typ";
static const char __pyx_k_val[] = "val";
static const char __pyx_k_exit[] = "__exit__";
static const char __pyx_k_main[] = "__main__";
static const char __pyx_k_test[] = "__test__";
static const char __pyx_k_enter[] = "__enter__";
static const char __pyx_k_pause[] = "__pause__";
static const char __pyx_k_value[] = "value";
static const char __pyx_k_import[] = "__import__";
static const char __pyx_k_resume[] = "__resume__";
static const char __pyx_k_context[] = "context";
static const char __pyx_k_pause_2[] = "pause";
static const char __pyx_k_resume_2[] = "resume";
static const char __pyx_k_scheduler[] = "scheduler";
static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
static const char __pyx_k_active_task[] = "_active_task";
static const char __pyx_k_active_task_2[] = "active_task";
static const char __pyx_k_get_active_task[] = "get_active_task";
static const char __pyx_k_NotImplementedError[] = "NotImplementedError";
static const char __pyx_k_Task_s_cannot_yield_while_s_is_a[] = "Task %s cannot yield while %s is active";
static PyObject *__pyx_n_s_;
static PyObject *__pyx_n_s_NotImplementedError;
static PyObject *__pyx_kp_s_Task_s_cannot_yield_while_s_is_a;
static PyObject *__pyx_n_s_active_task;
static PyObject *__pyx_n_s_active_task_2;
static PyObject *__pyx_n_s_context;
static PyObject *__pyx_n_s_enter;
static PyObject *__pyx_n_s_exit;
static PyObject *__pyx_n_s_get_active_task;
static PyObject *__pyx_n_s_import;
static PyObject *__pyx_n_s_main;
static PyObject *__pyx_n_s_pause;
static PyObject *__pyx_n_s_pause_2;
static PyObject *__pyx_n_s_pyx_vtable;
static PyObject *__pyx_n_s_resume;
static PyObject *__pyx_n_s_resume_2;
static PyObject *__pyx_n_s_scheduler;
static PyObject *__pyx_n_s_tb;
static PyObject *__pyx_n_s_test;
static PyObject *__pyx_n_s_ty;
static PyObject *__pyx_n_s_typ;
static PyObject *__pyx_n_s_val;
static PyObject *__pyx_n_s_value;
static PyObject *__pyx_pf_5asynq_8contexts_15NonAsyncContext___enter__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_15NonAsyncContext_2__exit__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self, PyObject *__pyx_v_typ, PyObject *__pyx_v_val, PyObject *__pyx_v_tb); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_15NonAsyncContext_4__pause__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_15NonAsyncContext_6__resume__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_enter_context(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_context); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_2leave_context(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_context, struct __pyx_obj_5asynq_10async_task_AsyncTask *__pyx_v_active_task); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext___enter__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_2__exit__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, PyObject *__pyx_v_ty, PyObject *__pyx_v_value, PyObject *__pyx_v_tb); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_4__resume__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_6resume(CYTHON_UNUSED struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_8__pause__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_10pause(CYTHON_UNUSED struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_12_active_task___get__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self); /* proto */
static int __pyx_pf_5asynq_8contexts_12AsyncContext_12_active_task_2__set__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5asynq_8contexts_12AsyncContext_12_active_task_4__del__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_10_is_active___get__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self); /* proto */
static int __pyx_pf_5asynq_8contexts_12AsyncContext_10_is_active_2__set__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_tp_new_5asynq_8contexts_NonAsyncContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_5asynq_8contexts_AsyncContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/

/* "asynq/contexts.py":31
 *     """
 * 
 *     def __enter__(self):             # <<<<<<<<<<<<<<
 *         self._active_task = enter_context(self)
 * 
 */

static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_1__enter__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_f_5asynq_8contexts_15NonAsyncContext___enter__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self, int __pyx_skip_dispatch) {
  struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__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;
  __Pyx_RefNannySetupContext("__enter__", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_enter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5asynq_8contexts_15NonAsyncContext_1__enter__)) {
      __Pyx_XDECREF(((PyObject *)__pyx_r));
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      if (__pyx_t_4) {
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5asynq_8contexts_NonAsyncContext))))) __PYX_ERR(0, 31, __pyx_L1_error)
      __pyx_r = ((struct __pyx_obj_5asynq_8contexts_NonAsyncContext *)__pyx_t_2);
      __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "asynq/contexts.py":32
 * 
 *     def __enter__(self):
 *         self._active_task = enter_context(self)             # <<<<<<<<<<<<<<
 * 
 *     def __exit__(self, typ, val, tb):
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_5asynq_8contexts_enter_context(((PyObject *)__pyx_v_self), 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_active_task, __pyx_t_1) < 0) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "asynq/contexts.py":31
 *     """
 * 
 *     def __enter__(self):             # <<<<<<<<<<<<<<
 *         self._active_task = enter_context(self)
 * 
 */

  /* function exit code */
  __pyx_r = ((struct __pyx_obj_5asynq_8contexts_NonAsyncContext *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("asynq.contexts.NonAsyncContext.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_1__enter__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_1__enter__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__enter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_15NonAsyncContext___enter__(((struct __pyx_obj_5asynq_8contexts_NonAsyncContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_15NonAsyncContext___enter__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__enter__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_5asynq_8contexts_15NonAsyncContext___enter__(__pyx_v_self, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.NonAsyncContext.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.py":34
 *         self._active_task = enter_context(self)
 * 
 *     def __exit__(self, typ, val, tb):             # <<<<<<<<<<<<<<
 *         leave_context(self, self._active_task)
 * 
 */

static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_3__exit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_5asynq_8contexts_15NonAsyncContext___exit__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_typ, CYTHON_UNUSED PyObject *__pyx_v_val, CYTHON_UNUSED PyObject *__pyx_v_tb, int __pyx_skip_dispatch) {
  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;
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("__exit__", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5asynq_8contexts_15NonAsyncContext_3__exit__)) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
      __pyx_t_5 = 0;
      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_5 = 1;
        }
      }
      __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 34, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_typ);
      __Pyx_GIVEREF(__pyx_v_typ);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_typ);
      __Pyx_INCREF(__pyx_v_val);
      __Pyx_GIVEREF(__pyx_v_val);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_val);
      __Pyx_INCREF(__pyx_v_tb);
      __Pyx_GIVEREF(__pyx_v_tb);
      PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_tb);
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "asynq/contexts.py":35
 * 
 *     def __exit__(self, typ, val, tb):
 *         leave_context(self, self._active_task)             # <<<<<<<<<<<<<<
 * 
 *     def __pause__(self):
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_active_task); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5asynq_10async_task_AsyncTask))))) __PYX_ERR(0, 35, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_5asynq_8contexts_leave_context(((PyObject *)__pyx_v_self), ((struct __pyx_obj_5asynq_10async_task_AsyncTask *)__pyx_t_1), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "asynq/contexts.py":34
 *         self._active_task = enter_context(self)
 * 
 *     def __exit__(self, typ, val, tb):             # <<<<<<<<<<<<<<
 *         leave_context(self, self._active_task)
 * 
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("asynq.contexts.NonAsyncContext.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_3__exit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_3__exit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_typ = 0;
  PyObject *__pyx_v_val = 0;
  PyObject *__pyx_v_tb = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__exit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_typ,&__pyx_n_s_val,&__pyx_n_s_tb,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_typ)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_val)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(0, 34, __pyx_L3_error)
        }
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tb)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(0, 34, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(0, 34, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_typ = values[0];
    __pyx_v_val = values[1];
    __pyx_v_tb = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 34, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("asynq.contexts.NonAsyncContext.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5asynq_8contexts_15NonAsyncContext_2__exit__(((struct __pyx_obj_5asynq_8contexts_NonAsyncContext *)__pyx_v_self), __pyx_v_typ, __pyx_v_val, __pyx_v_tb);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_15NonAsyncContext_2__exit__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self, PyObject *__pyx_v_typ, PyObject *__pyx_v_val, PyObject *__pyx_v_tb) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__exit__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_5asynq_8contexts_15NonAsyncContext___exit__(__pyx_v_self, __pyx_v_typ, __pyx_v_val, __pyx_v_tb, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.NonAsyncContext.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.py":37
 *         leave_context(self, self._active_task)
 * 
 *     def __pause__(self):             # <<<<<<<<<<<<<<
 *         assert False, 'Task %s cannot yield while %s is active' % (self._active_task, self)
 * 
 */

static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_5__pause__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_f_5asynq_8contexts_15NonAsyncContext___pause__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self, int __pyx_skip_dispatch) {
  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;
  __Pyx_RefNannySetupContext("__pause__", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_pause); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5asynq_8contexts_15NonAsyncContext_5__pause__)) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      if (__pyx_t_4) {
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "asynq/contexts.py":38
 * 
 *     def __pause__(self):
 *         assert False, 'Task %s cannot yield while %s is active' % (self._active_task, self)             # <<<<<<<<<<<<<<
 * 
 *     def __resume__(self):
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!0)) {
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_active_task); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
      __Pyx_INCREF(((PyObject *)__pyx_v_self));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
      PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
      __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Task_s_cannot_yield_while_s_is_a, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(0, 38, __pyx_L1_error)
    }
  }
  #endif

  /* "asynq/contexts.py":37
 *         leave_context(self, self._active_task)
 * 
 *     def __pause__(self):             # <<<<<<<<<<<<<<
 *         assert False, 'Task %s cannot yield while %s is active' % (self._active_task, self)
 * 
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("asynq.contexts.NonAsyncContext.__pause__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_5__pause__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_5__pause__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pause__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_15NonAsyncContext_4__pause__(((struct __pyx_obj_5asynq_8contexts_NonAsyncContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_15NonAsyncContext_4__pause__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__pause__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_5asynq_8contexts_15NonAsyncContext___pause__(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.NonAsyncContext.__pause__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.py":40
 *         assert False, 'Task %s cannot yield while %s is active' % (self._active_task, self)
 * 
 *     def __resume__(self):             # <<<<<<<<<<<<<<
 *         assert False, 'Task %s cannot yield while %s is active' % (self._active_task, self)
 * 
 */

static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_7__resume__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_f_5asynq_8contexts_15NonAsyncContext___resume__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self, int __pyx_skip_dispatch) {
  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;
  __Pyx_RefNannySetupContext("__resume__", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_resume); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5asynq_8contexts_15NonAsyncContext_7__resume__)) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      if (__pyx_t_4) {
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "asynq/contexts.py":41
 * 
 *     def __resume__(self):
 *         assert False, 'Task %s cannot yield while %s is active' % (self._active_task, self)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    if (unlikely(!0)) {
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_active_task); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 41, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 41, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
      __Pyx_INCREF(((PyObject *)__pyx_v_self));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
      PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
      __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Task_s_cannot_yield_while_s_is_a, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 41, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(0, 41, __pyx_L1_error)
    }
  }
  #endif

  /* "asynq/contexts.py":40
 *         assert False, 'Task %s cannot yield while %s is active' % (self._active_task, self)
 * 
 *     def __resume__(self):             # <<<<<<<<<<<<<<
 *         assert False, 'Task %s cannot yield while %s is active' % (self._active_task, self)
 * 
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("asynq.contexts.NonAsyncContext.__resume__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_7__resume__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_15NonAsyncContext_7__resume__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__resume__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_15NonAsyncContext_6__resume__(((struct __pyx_obj_5asynq_8contexts_NonAsyncContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_15NonAsyncContext_6__resume__(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__resume__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_5asynq_8contexts_15NonAsyncContext___resume__(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.NonAsyncContext.__resume__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.py":44
 * 
 * 
 * def enter_context(context):             # <<<<<<<<<<<<<<
 *     active_task = scheduler.get_active_task()
 *     if active_task is not None:
 */

static PyObject *__pyx_pw_5asynq_8contexts_1enter_context(PyObject *__pyx_self, PyObject *__pyx_v_context); /*proto*/
static struct __pyx_obj_5asynq_10async_task_AsyncTask *__pyx_f_5asynq_8contexts_enter_context(PyObject *__pyx_v_context, CYTHON_UNUSED int __pyx_skip_dispatch) {
  struct __pyx_obj_5asynq_10async_task_AsyncTask *__pyx_v_active_task = 0;
  struct __pyx_obj_5asynq_10async_task_AsyncTask *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("enter_context", 0);

  /* "asynq/contexts.py":45
 * 
 * def enter_context(context):
 *     active_task = scheduler.get_active_task()             # <<<<<<<<<<<<<<
 *     if active_task is not None:
 *         active_task._enter_context(context)
 */
  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_scheduler); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get_active_task); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  if (__pyx_t_2) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5asynq_10async_task_AsyncTask))))) __PYX_ERR(0, 45, __pyx_L1_error)
  __pyx_v_active_task = ((struct __pyx_obj_5asynq_10async_task_AsyncTask *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "asynq/contexts.py":46
 * def enter_context(context):
 *     active_task = scheduler.get_active_task()
 *     if active_task is not None:             # <<<<<<<<<<<<<<
 *         active_task._enter_context(context)
 *     return active_task
 */
  __pyx_t_4 = (((PyObject *)__pyx_v_active_task) != Py_None);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "asynq/contexts.py":47
 *     active_task = scheduler.get_active_task()
 *     if active_task is not None:
 *         active_task._enter_context(context)             # <<<<<<<<<<<<<<
 *     return active_task
 * 
 */
    __pyx_t_1 = ((struct __pyx_vtabstruct_5asynq_10async_task_AsyncTask *)__pyx_v_active_task->__pyx_base.__pyx_vtab)->_enter_context(__pyx_v_active_task, __pyx_v_context); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "asynq/contexts.py":46
 * def enter_context(context):
 *     active_task = scheduler.get_active_task()
 *     if active_task is not None:             # <<<<<<<<<<<<<<
 *         active_task._enter_context(context)
 *     return active_task
 */
  }

  /* "asynq/contexts.py":48
 *     if active_task is not None:
 *         active_task._enter_context(context)
 *     return active_task             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_active_task));
  __pyx_r = __pyx_v_active_task;
  goto __pyx_L0;

  /* "asynq/contexts.py":44
 * 
 * 
 * def enter_context(context):             # <<<<<<<<<<<<<<
 *     active_task = scheduler.get_active_task()
 *     if active_task is not None:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("asynq.contexts.enter_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_active_task);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_1enter_context(PyObject *__pyx_self, PyObject *__pyx_v_context); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_1enter_context(PyObject *__pyx_self, PyObject *__pyx_v_context) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("enter_context (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_enter_context(__pyx_self, ((PyObject *)__pyx_v_context));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_enter_context(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_context) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("enter_context", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_5asynq_8contexts_enter_context(__pyx_v_context, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.enter_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.py":51
 * 
 * 
 * def leave_context(context, active_task):             # <<<<<<<<<<<<<<
 *     if active_task is not None:
 *         active_task._leave_context(context)
 */

static PyObject *__pyx_pw_5asynq_8contexts_3leave_context(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_5asynq_8contexts_leave_context(PyObject *__pyx_v_context, struct __pyx_obj_5asynq_10async_task_AsyncTask *__pyx_v_active_task, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("leave_context", 0);

  /* "asynq/contexts.py":52
 * 
 * def leave_context(context, active_task):
 *     if active_task is not None:             # <<<<<<<<<<<<<<
 *         active_task._leave_context(context)
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_active_task) != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "asynq/contexts.py":53
 * def leave_context(context, active_task):
 *     if active_task is not None:
 *         active_task._leave_context(context)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_3 = ((struct __pyx_vtabstruct_5asynq_10async_task_AsyncTask *)__pyx_v_active_task->__pyx_base.__pyx_vtab)->_leave_context(__pyx_v_active_task, __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "asynq/contexts.py":52
 * 
 * def leave_context(context, active_task):
 *     if active_task is not None:             # <<<<<<<<<<<<<<
 *         active_task._leave_context(context)
 * 
 */
  }

  /* "asynq/contexts.py":51
 * 
 * 
 * def leave_context(context, active_task):             # <<<<<<<<<<<<<<
 *     if active_task is not None:
 *         active_task._leave_context(context)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("asynq.contexts.leave_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_3leave_context(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_3leave_context(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_context = 0;
  struct __pyx_obj_5asynq_10async_task_AsyncTask *__pyx_v_active_task = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("leave_context (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_context,&__pyx_n_s_active_task_2,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);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_context)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_active_task_2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("leave_context", 1, 2, 2, 1); __PYX_ERR(0, 51, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "leave_context") < 0)) __PYX_ERR(0, 51, __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_context = values[0];
    __pyx_v_active_task = ((struct __pyx_obj_5asynq_10async_task_AsyncTask *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("leave_context", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 51, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("asynq.contexts.leave_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_active_task), __pyx_ptype_5asynq_10async_task_AsyncTask, 1, "active_task", 0))) __PYX_ERR(0, 51, __pyx_L1_error)
  __pyx_r = __pyx_pf_5asynq_8contexts_2leave_context(__pyx_self, __pyx_v_context, __pyx_v_active_task);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_2leave_context(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_context, struct __pyx_obj_5asynq_10async_task_AsyncTask *__pyx_v_active_task) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("leave_context", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_5asynq_8contexts_leave_context(__pyx_v_context, __pyx_v_active_task, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.leave_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.py":72
 *     """
 * 
 *     def __enter__(self):             # <<<<<<<<<<<<<<
 *         self._active_task = enter_context(self)
 *         self.__resume__()
 */

static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_1__enter__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_f_5asynq_8contexts_12AsyncContext___enter__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, int __pyx_skip_dispatch) {
  struct __pyx_obj_5asynq_8contexts_AsyncContext *__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;
  __Pyx_RefNannySetupContext("__enter__", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_enter); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5asynq_8contexts_12AsyncContext_1__enter__)) {
      __Pyx_XDECREF(((PyObject *)__pyx_r));
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      if (__pyx_t_4) {
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 72, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 72, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5asynq_8contexts_AsyncContext))))) __PYX_ERR(0, 72, __pyx_L1_error)
      __pyx_r = ((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_t_2);
      __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "asynq/contexts.py":73
 * 
 *     def __enter__(self):
 *         self._active_task = enter_context(self)             # <<<<<<<<<<<<<<
 *         self.__resume__()
 *         return self
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_5asynq_8contexts_enter_context(((PyObject *)__pyx_v_self), 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_active_task);
  __Pyx_DECREF(__pyx_v_self->_active_task);
  __pyx_v_self->_active_task = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "asynq/contexts.py":74
 *     def __enter__(self):
 *         self._active_task = enter_context(self)
 *         self.__resume__()             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_5asynq_8contexts_AsyncContext *)__pyx_v_self->__pyx_vtab)->__pyx___resume__(__pyx_v_self, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "asynq/contexts.py":75
 *         self._active_task = enter_context(self)
 *         self.__resume__()
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     def __exit__(self, ty, value, tb):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = __pyx_v_self;
  goto __pyx_L0;

  /* "asynq/contexts.py":72
 *     """
 * 
 *     def __enter__(self):             # <<<<<<<<<<<<<<
 *         self._active_task = enter_context(self)
 *         self.__resume__()
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("asynq.contexts.AsyncContext.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_1__enter__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_1__enter__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__enter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_12AsyncContext___enter__(((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext___enter__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__enter__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_5asynq_8contexts_12AsyncContext___enter__(__pyx_v_self, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.AsyncContext.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.py":77
 *         return self
 * 
 *     def __exit__(self, ty, value, tb):             # <<<<<<<<<<<<<<
 *         leave_context(self, self._active_task)
 *         self.__pause__()
 */

static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_3__exit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_5asynq_8contexts_12AsyncContext___exit__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_ty, CYTHON_UNUSED PyObject *__pyx_v_value, CYTHON_UNUSED PyObject *__pyx_v_tb, int __pyx_skip_dispatch) {
  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;
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("__exit__", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5asynq_8contexts_12AsyncContext_3__exit__)) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
      __pyx_t_5 = 0;
      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_5 = 1;
        }
      }
      __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 77, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_ty);
      __Pyx_GIVEREF(__pyx_v_ty);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_ty);
      __Pyx_INCREF(__pyx_v_value);
      __Pyx_GIVEREF(__pyx_v_value);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_value);
      __Pyx_INCREF(__pyx_v_tb);
      __Pyx_GIVEREF(__pyx_v_tb);
      PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_tb);
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "asynq/contexts.py":78
 * 
 *     def __exit__(self, ty, value, tb):
 *         leave_context(self, self._active_task)             # <<<<<<<<<<<<<<
 *         self.__pause__()
 * 
 */
  if (!(likely(((__pyx_v_self->_active_task) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self->_active_task, __pyx_ptype_5asynq_10async_task_AsyncTask))))) __PYX_ERR(0, 78, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_self->_active_task;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_5asynq_8contexts_leave_context(((PyObject *)__pyx_v_self), ((struct __pyx_obj_5asynq_10async_task_AsyncTask *)__pyx_t_1), 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "asynq/contexts.py":79
 *     def __exit__(self, ty, value, tb):
 *         leave_context(self, self._active_task)
 *         self.__pause__()             # <<<<<<<<<<<<<<
 * 
 *     def __resume__(self):
 */
  __pyx_t_2 = ((struct __pyx_vtabstruct_5asynq_8contexts_AsyncContext *)__pyx_v_self->__pyx_vtab)->__pyx___pause__(__pyx_v_self, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "asynq/contexts.py":77
 *         return self
 * 
 *     def __exit__(self, ty, value, tb):             # <<<<<<<<<<<<<<
 *         leave_context(self, self._active_task)
 *         self.__pause__()
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("asynq.contexts.AsyncContext.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_3__exit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_3__exit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_ty = 0;
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_tb = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__exit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ty,&__pyx_n_s_value,&__pyx_n_s_tb,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ty)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); __PYX_ERR(0, 77, __pyx_L3_error)
        }
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tb)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); __PYX_ERR(0, 77, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) __PYX_ERR(0, 77, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_ty = values[0];
    __pyx_v_value = values[1];
    __pyx_v_tb = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 77, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("asynq.contexts.AsyncContext.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5asynq_8contexts_12AsyncContext_2__exit__(((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_v_self), __pyx_v_ty, __pyx_v_value, __pyx_v_tb);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_2__exit__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, PyObject *__pyx_v_ty, PyObject *__pyx_v_value, PyObject *__pyx_v_tb) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__exit__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_5asynq_8contexts_12AsyncContext___exit__(__pyx_v_self, __pyx_v_ty, __pyx_v_value, __pyx_v_tb, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.AsyncContext.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.py":81
 *         self.__pause__()
 * 
 *     def __resume__(self):             # <<<<<<<<<<<<<<
 *         self._is_active = True
 *         self.resume()
 */

static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_5__resume__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_f_5asynq_8contexts_12AsyncContext___resume__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, int __pyx_skip_dispatch) {
  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;
  __Pyx_RefNannySetupContext("__resume__", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_resume); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 81, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5asynq_8contexts_12AsyncContext_5__resume__)) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      if (__pyx_t_4) {
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 81, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 81, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "asynq/contexts.py":82
 * 
 *     def __resume__(self):
 *         self._is_active = True             # <<<<<<<<<<<<<<
 *         self.resume()
 * 
 */
  __pyx_v_self->_is_active = 1;

  /* "asynq/contexts.py":83
 *     def __resume__(self):
 *         self._is_active = True
 *         self.resume()             # <<<<<<<<<<<<<<
 * 
 *     def resume(self):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_resume_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  if (__pyx_t_3) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 83, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 83, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "asynq/contexts.py":81
 *         self.__pause__()
 * 
 *     def __resume__(self):             # <<<<<<<<<<<<<<
 *         self._is_active = True
 *         self.resume()
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("asynq.contexts.AsyncContext.__resume__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_5__resume__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_5__resume__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__resume__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_12AsyncContext_4__resume__(((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_4__resume__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__resume__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_5asynq_8contexts_12AsyncContext___resume__(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.AsyncContext.__resume__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.py":85
 *         self.resume()
 * 
 *     def resume(self):             # <<<<<<<<<<<<<<
 *         raise NotImplementedError()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_7resume(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_7resume(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("resume (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_12AsyncContext_6resume(((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_6resume(CYTHON_UNUSED struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("resume", 0);

  /* "asynq/contexts.py":86
 * 
 *     def resume(self):
 *         raise NotImplementedError()             # <<<<<<<<<<<<<<
 * 
 *     def __pause__(self):
 */
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_builtin_NotImplementedError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(0, 86, __pyx_L1_error)

  /* "asynq/contexts.py":85
 *         self.resume()
 * 
 *     def resume(self):             # <<<<<<<<<<<<<<
 *         raise NotImplementedError()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.AsyncContext.resume", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.py":88
 *         raise NotImplementedError()
 * 
 *     def __pause__(self):             # <<<<<<<<<<<<<<
 *         self.pause()
 *         self._is_active = False
 */

static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_9__pause__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_f_5asynq_8contexts_12AsyncContext___pause__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, int __pyx_skip_dispatch) {
  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;
  __Pyx_RefNannySetupContext("__pause__", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_pause); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_5asynq_8contexts_12AsyncContext_9__pause__)) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL;
      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      if (__pyx_t_4) {
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 88, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 88, __pyx_L1_error)
      }
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "asynq/contexts.py":89
 * 
 *     def __pause__(self):
 *         self.pause()             # <<<<<<<<<<<<<<
 *         self._is_active = False
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_pause_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  if (__pyx_t_3) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error)
  }
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "asynq/contexts.py":90
 *     def __pause__(self):
 *         self.pause()
 *         self._is_active = False             # <<<<<<<<<<<<<<
 * 
 *     def pause(self):
 */
  __pyx_v_self->_is_active = 0;

  /* "asynq/contexts.py":88
 *         raise NotImplementedError()
 * 
 *     def __pause__(self):             # <<<<<<<<<<<<<<
 *         self.pause()
 *         self._is_active = False
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("asynq.contexts.AsyncContext.__pause__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_9__pause__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_9__pause__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pause__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_12AsyncContext_8__pause__(((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_8__pause__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__pause__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_5asynq_8contexts_12AsyncContext___pause__(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.AsyncContext.__pause__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.py":92
 *         self._is_active = False
 * 
 *     def pause(self):             # <<<<<<<<<<<<<<
 *         raise NotImplementedError()
 */

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_11pause(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_11pause(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pause (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_12AsyncContext_10pause(((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_10pause(CYTHON_UNUSED struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("pause", 0);

  /* "asynq/contexts.py":93
 * 
 *     def pause(self):
 *         raise NotImplementedError()             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_builtin_NotImplementedError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(0, 93, __pyx_L1_error)

  /* "asynq/contexts.py":92
 *         self._is_active = False
 * 
 *     def pause(self):             # <<<<<<<<<<<<<<
 *         raise NotImplementedError()
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.AsyncContext.pause", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.pxd":32
 * 
 * cdef class AsyncContext(object):
 *     cdef public object _active_task             # <<<<<<<<<<<<<<
 *     cdef public bint _is_active
 *     cpdef AsyncContext __enter__(self)
 */

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_12_active_task_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_12_active_task_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_12AsyncContext_12_active_task___get__(((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_12_active_task___get__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_active_task);
  __pyx_r = __pyx_v_self->_active_task;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5asynq_8contexts_12AsyncContext_12_active_task_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5asynq_8contexts_12AsyncContext_12_active_task_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_12AsyncContext_12_active_task_2__set__(((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5asynq_8contexts_12AsyncContext_12_active_task_2__set__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_self->_active_task);
  __Pyx_DECREF(__pyx_v_self->_active_task);
  __pyx_v_self->_active_task = __pyx_v_value;

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5asynq_8contexts_12AsyncContext_12_active_task_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5asynq_8contexts_12AsyncContext_12_active_task_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_12AsyncContext_12_active_task_4__del__(((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5asynq_8contexts_12AsyncContext_12_active_task_4__del__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_active_task);
  __Pyx_DECREF(__pyx_v_self->_active_task);
  __pyx_v_self->_active_task = Py_None;

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "asynq/contexts.pxd":33
 * cdef class AsyncContext(object):
 *     cdef public object _active_task
 *     cdef public bint _is_active             # <<<<<<<<<<<<<<
 *     cpdef AsyncContext __enter__(self)
 *     cpdef __exit__(self, ty, val, tb)
 */

/* Python wrapper */
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_10_is_active_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5asynq_8contexts_12AsyncContext_10_is_active_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_12AsyncContext_10_is_active___get__(((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5asynq_8contexts_12AsyncContext_10_is_active___get__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_is_active); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("asynq.contexts.AsyncContext._is_active.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5asynq_8contexts_12AsyncContext_10_is_active_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5asynq_8contexts_12AsyncContext_10_is_active_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5asynq_8contexts_12AsyncContext_10_is_active_2__set__(((struct __pyx_obj_5asynq_8contexts_AsyncContext *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5asynq_8contexts_12AsyncContext_10_is_active_2__set__(struct __pyx_obj_5asynq_8contexts_AsyncContext *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 33, __pyx_L1_error)
  __pyx_v_self->_is_active = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("asynq.contexts.AsyncContext._is_active.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static struct __pyx_vtabstruct_5asynq_8contexts_NonAsyncContext __pyx_vtable_5asynq_8contexts_NonAsyncContext;

static PyObject *__pyx_tp_new_5asynq_8contexts_NonAsyncContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_5asynq_8contexts_NonAsyncContext *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_5asynq_8contexts_NonAsyncContext *)o);
  p->__pyx_vtab = __pyx_vtabptr_5asynq_8contexts_NonAsyncContext;
  return o;
}

static void __pyx_tp_dealloc_5asynq_8contexts_NonAsyncContext(PyObject *o) {
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_5asynq_8contexts_NonAsyncContext[] = {
  {"__enter__", (PyCFunction)__pyx_pw_5asynq_8contexts_15NonAsyncContext_1__enter__, METH_NOARGS, 0},
  {"__exit__", (PyCFunction)__pyx_pw_5asynq_8contexts_15NonAsyncContext_3__exit__, METH_VARARGS|METH_KEYWORDS, 0},
  {"__pause__", (PyCFunction)__pyx_pw_5asynq_8contexts_15NonAsyncContext_5__pause__, METH_NOARGS, 0},
  {"__resume__", (PyCFunction)__pyx_pw_5asynq_8contexts_15NonAsyncContext_7__resume__, METH_NOARGS, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_5asynq_8contexts_NonAsyncContext = {
  PyVarObject_HEAD_INIT(0, 0)
  "asynq.contexts.NonAsyncContext", /*tp_name*/
  sizeof(struct __pyx_obj_5asynq_8contexts_NonAsyncContext), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_5asynq_8contexts_NonAsyncContext, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "Indicates that context can't contain yield statements.\n\n    It means while a NonAsyncContext is active, async tasks cannot\n    yield the control back to scheduler.\n\n    Contexts should subclass this class if they want it throw an AssertionError\n    if async tasks end up yielding within them.\n\n    Note: Remember to call super inside your __enter__/__exit__.\n\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_5asynq_8contexts_NonAsyncContext, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_5asynq_8contexts_NonAsyncContext, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};
static struct __pyx_vtabstruct_5asynq_8contexts_AsyncContext __pyx_vtable_5asynq_8contexts_AsyncContext;

static PyObject *__pyx_tp_new_5asynq_8contexts_AsyncContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_5asynq_8contexts_AsyncContext *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_5asynq_8contexts_AsyncContext *)o);
  p->__pyx_vtab = __pyx_vtabptr_5asynq_8contexts_AsyncContext;
  p->_active_task = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_5asynq_8contexts_AsyncContext(PyObject *o) {
  struct __pyx_obj_5asynq_8contexts_AsyncContext *p = (struct __pyx_obj_5asynq_8contexts_AsyncContext *)o;
  #if PY_VERSION_HEX >= 0x030400a1
  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->_active_task);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_5asynq_8contexts_AsyncContext(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_5asynq_8contexts_AsyncContext *p = (struct __pyx_obj_5asynq_8contexts_AsyncContext *)o;
  if (p->_active_task) {
    e = (*v)(p->_active_task, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_5asynq_8contexts_AsyncContext(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_5asynq_8contexts_AsyncContext *p = (struct __pyx_obj_5asynq_8contexts_AsyncContext *)o;
  tmp = ((PyObject*)p->_active_task);
  p->_active_task = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_5asynq_8contexts_12AsyncContext__active_task(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5asynq_8contexts_12AsyncContext_12_active_task_1__get__(o);
}

static int __pyx_setprop_5asynq_8contexts_12AsyncContext__active_task(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5asynq_8contexts_12AsyncContext_12_active_task_3__set__(o, v);
  }
  else {
    return __pyx_pw_5asynq_8contexts_12AsyncContext_12_active_task_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5asynq_8contexts_12AsyncContext__is_active(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5asynq_8contexts_12AsyncContext_10_is_active_1__get__(o);
}

static int __pyx_setprop_5asynq_8contexts_12AsyncContext__is_active(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5asynq_8contexts_12AsyncContext_10_is_active_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_5asynq_8contexts_AsyncContext[] = {
  {"__enter__", (PyCFunction)__pyx_pw_5asynq_8contexts_12AsyncContext_1__enter__, METH_NOARGS, 0},
  {"__exit__", (PyCFunction)__pyx_pw_5asynq_8contexts_12AsyncContext_3__exit__, METH_VARARGS|METH_KEYWORDS, 0},
  {"__resume__", (PyCFunction)__pyx_pw_5asynq_8contexts_12AsyncContext_5__resume__, METH_NOARGS, 0},
  {"resume", (PyCFunction)__pyx_pw_5asynq_8contexts_12AsyncContext_7resume, METH_NOARGS, 0},
  {"__pause__", (PyCFunction)__pyx_pw_5asynq_8contexts_12AsyncContext_9__pause__, METH_NOARGS, 0},
  {"pause", (PyCFunction)__pyx_pw_5asynq_8contexts_12AsyncContext_11pause, METH_NOARGS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_5asynq_8contexts_AsyncContext[] = {
  {(char *)"_active_task", __pyx_getprop_5asynq_8contexts_12AsyncContext__active_task, __pyx_setprop_5asynq_8contexts_12AsyncContext__active_task, (char *)0, 0},
  {(char *)"_is_active", __pyx_getprop_5asynq_8contexts_12AsyncContext__is_active, __pyx_setprop_5asynq_8contexts_12AsyncContext__is_active, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_5asynq_8contexts_AsyncContext = {
  PyVarObject_HEAD_INIT(0, 0)
  "asynq.contexts.AsyncContext", /*tp_name*/
  sizeof(struct __pyx_obj_5asynq_8contexts_AsyncContext), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_5asynq_8contexts_AsyncContext, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "Base class for contexts that should pause and resume during an async's function execution.\n\n    Your context should subclass this class and implement pause and resume (at least).\n\n    That would make the context pause and resume each time the execution of the async function\n    within this context is paused and resumed.\n\n    Additionally, you can also subclass __enter__ and __exit__ if you want to customize its\n    behaviour. Remember to call super in that case.\n\n    NOTE: __enter__/__exit__ methods automatically call resume/pause so the overridden\n    __enter__/__exit__ methods shouldn't do that explicitly.\n\n    ", /*tp_doc*/
  __pyx_tp_traverse_5asynq_8contexts_AsyncContext, /*tp_traverse*/
  __pyx_tp_clear_5asynq_8contexts_AsyncContext, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_5asynq_8contexts_AsyncContext, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_5asynq_8contexts_AsyncContext, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_5asynq_8contexts_AsyncContext, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
};

static PyMethodDef __pyx_methods[] = {
  {"enter_context", (PyCFunction)__pyx_pw_5asynq_8contexts_1enter_context, METH_O, 0},
  {"leave_context", (PyCFunction)__pyx_pw_5asynq_8contexts_3leave_context, METH_VARARGS|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef __pyx_moduledef = {
  #if PY_VERSION_HEX < 0x03020000
    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
  #else
    PyModuleDef_HEAD_INIT,
  #endif
    "contexts",
    0, /* m_doc */
    -1, /* m_size */
    __pyx_methods /* m_methods */,
    NULL, /* m_reload */
    NULL, /* m_traverse */
    NULL, /* m_clear */
    NULL /* m_free */
};
#endif

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_n_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 1},
  {&__pyx_n_s_NotImplementedError, __pyx_k_NotImplementedError, sizeof(__pyx_k_NotImplementedError), 0, 0, 1, 1},
  {&__pyx_kp_s_Task_s_cannot_yield_while_s_is_a, __pyx_k_Task_s_cannot_yield_while_s_is_a, sizeof(__pyx_k_Task_s_cannot_yield_while_s_is_a), 0, 0, 1, 0},
  {&__pyx_n_s_active_task, __pyx_k_active_task, sizeof(__pyx_k_active_task), 0, 0, 1, 1},
  {&__pyx_n_s_active_task_2, __pyx_k_active_task_2, sizeof(__pyx_k_active_task_2), 0, 0, 1, 1},
  {&__pyx_n_s_context, __pyx_k_context, sizeof(__pyx_k_context), 0, 0, 1, 1},
  {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1},
  {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1},
  {&__pyx_n_s_get_active_task, __pyx_k_get_active_task, sizeof(__pyx_k_get_active_task), 0, 0, 1, 1},
  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
  {&__pyx_n_s_pause, __pyx_k_pause, sizeof(__pyx_k_pause), 0, 0, 1, 1},
  {&__pyx_n_s_pause_2, __pyx_k_pause_2, sizeof(__pyx_k_pause_2), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
  {&__pyx_n_s_resume, __pyx_k_resume, sizeof(__pyx_k_resume), 0, 0, 1, 1},
  {&__pyx_n_s_resume_2, __pyx_k_resume_2, sizeof(__pyx_k_resume_2), 0, 0, 1, 1},
  {&__pyx_n_s_scheduler, __pyx_k_scheduler, sizeof(__pyx_k_scheduler), 0, 0, 1, 1},
  {&__pyx_n_s_tb, __pyx_k_tb, sizeof(__pyx_k_tb), 0, 0, 1, 1},
  {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
  {&__pyx_n_s_ty, __pyx_k_ty, sizeof(__pyx_k_ty), 0, 0, 1, 1},
  {&__pyx_n_s_typ, __pyx_k_typ, sizeof(__pyx_k_typ), 0, 0, 1, 1},
  {&__pyx_n_s_val, __pyx_k_val, sizeof(__pyx_k_val), 0, 0, 1, 1},
  {&__pyx_n_s_value, __pyx_k_value, sizeof(__pyx_k_value), 0, 0, 1, 1},
  {0, 0, 0, 0, 0, 0, 0}
};
static int __Pyx_InitCachedBuiltins(void) {
  __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(0, 86, __pyx_L1_error)
  return 0;
  __pyx_L1_error:;
  return -1;
}

static int __Pyx_InitCachedConstants(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
  __Pyx_RefNannyFinishContext();
  return 0;
}

static 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;
}

#if PY_MAJOR_VERSION < 3
PyMODINIT_FUNC initcontexts(void); /*proto*/
PyMODINIT_FUNC initcontexts(void)
#else
PyMODINIT_FUNC PyInit_contexts(void); /*proto*/
PyMODINIT_FUNC PyInit_contexts(void)
#endif
{
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  __Pyx_RefNannyDeclarations
  #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("PyMODINIT_FUNC PyInit_contexts(void)", 0);
  if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __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_StopAsyncIteration_USED
  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  /*--- Library function declarations ---*/
  /*--- Threads initialization code ---*/
  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
  #ifdef WITH_THREAD /* Python build with threading support? */
  PyEval_InitThreads();
  #endif
  #endif
  /*--- Module creation code ---*/
  #if PY_MAJOR_VERSION < 3
  __pyx_m = Py_InitModule4("contexts", __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)
  __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)
  #if CYTHON_COMPILING_IN_PYPY
  Py_INCREF(__pyx_b);
  #endif
  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_asynq__contexts) {
    if (PyObject_SetAttrString(__pyx_m, "__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, "asynq.contexts")) {
      if (unlikely(PyDict_SetItemString(modules, "asynq.contexts", __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 init code ---*/
  /*--- Variable export code ---*/
  /*--- Function export code ---*/
  if (__Pyx_ExportFunction("enter_context", (void (*)(void))__pyx_f_5asynq_8contexts_enter_context, "struct __pyx_obj_5asynq_10async_task_AsyncTask *(PyObject *, int __pyx_skip_dispatch)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("leave_context", (void (*)(void))__pyx_f_5asynq_8contexts_leave_context, "PyObject *(PyObject *, struct __pyx_obj_5asynq_10async_task_AsyncTask *, int __pyx_skip_dispatch)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Type init code ---*/
  __pyx_vtabptr_5asynq_8contexts_NonAsyncContext = &__pyx_vtable_5asynq_8contexts_NonAsyncContext;
  __pyx_vtable_5asynq_8contexts_NonAsyncContext.__pyx___enter__ = (struct __pyx_obj_5asynq_8contexts_NonAsyncContext *(*)(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *, int __pyx_skip_dispatch))__pyx_f_5asynq_8contexts_15NonAsyncContext___enter__;
  __pyx_vtable_5asynq_8contexts_NonAsyncContext.__pyx___exit__ = (PyObject *(*)(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch))__pyx_f_5asynq_8contexts_15NonAsyncContext___exit__;
  __pyx_vtable_5asynq_8contexts_NonAsyncContext.__pyx___pause__ = (PyObject *(*)(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *, int __pyx_skip_dispatch))__pyx_f_5asynq_8contexts_15NonAsyncContext___pause__;
  __pyx_vtable_5asynq_8contexts_NonAsyncContext.__pyx___resume__ = (PyObject *(*)(struct __pyx_obj_5asynq_8contexts_NonAsyncContext *, int __pyx_skip_dispatch))__pyx_f_5asynq_8contexts_15NonAsyncContext___resume__;
  if (PyType_Ready(&__pyx_type_5asynq_8contexts_NonAsyncContext) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __pyx_type_5asynq_8contexts_NonAsyncContext.tp_print = 0;
  if (__Pyx_SetVtable(__pyx_type_5asynq_8contexts_NonAsyncContext.tp_dict, __pyx_vtabptr_5asynq_8contexts_NonAsyncContext) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  if (PyObject_SetAttrString(__pyx_m, "NonAsyncContext", (PyObject *)&__pyx_type_5asynq_8contexts_NonAsyncContext) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
  __pyx_ptype_5asynq_8contexts_NonAsyncContext = &__pyx_type_5asynq_8contexts_NonAsyncContext;
  __pyx_vtabptr_5asynq_8contexts_AsyncContext = &__pyx_vtable_5asynq_8contexts_AsyncContext;
  __pyx_vtable_5asynq_8contexts_AsyncContext.__pyx___enter__ = (struct __pyx_obj_5asynq_8contexts_AsyncContext *(*)(struct __pyx_obj_5asynq_8contexts_AsyncContext *, int __pyx_skip_dispatch))__pyx_f_5asynq_8contexts_12AsyncContext___enter__;
  __pyx_vtable_5asynq_8contexts_AsyncContext.__pyx___exit__ = (PyObject *(*)(struct __pyx_obj_5asynq_8contexts_AsyncContext *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch))__pyx_f_5asynq_8contexts_12AsyncContext___exit__;
  __pyx_vtable_5asynq_8contexts_AsyncContext.__pyx___pause__ = (PyObject *(*)(struct __pyx_obj_5asynq_8contexts_AsyncContext *, int __pyx_skip_dispatch))__pyx_f_5asynq_8contexts_12AsyncContext___pause__;
  __pyx_vtable_5asynq_8contexts_AsyncContext.__pyx___resume__ = (PyObject *(*)(struct __pyx_obj_5asynq_8contexts_AsyncContext *, int __pyx_skip_dispatch))__pyx_f_5asynq_8contexts_12AsyncContext___resume__;
  if (PyType_Ready(&__pyx_type_5asynq_8contexts_AsyncContext) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
  __pyx_type_5asynq_8contexts_AsyncContext.tp_print = 0;
  if (__Pyx_SetVtable(__pyx_type_5asynq_8contexts_AsyncContext.tp_dict, __pyx_vtabptr_5asynq_8contexts_AsyncContext) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
  if (PyObject_SetAttrString(__pyx_m, "AsyncContext", (PyObject *)&__pyx_type_5asynq_8contexts_AsyncContext) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
  __pyx_ptype_5asynq_8contexts_AsyncContext = &__pyx_type_5asynq_8contexts_AsyncContext;
  /*--- Type import code ---*/
  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
  #if CYTHON_COMPILING_IN_PYPY
  sizeof(PyTypeObject),
  #else
  sizeof(PyHeapTypeObject),
  #endif
  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) __PYX_ERR(2, 9, __pyx_L1_error)
  __pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "bool", sizeof(PyBoolObject), 0); if (unlikely(!__pyx_ptype_7cpython_4bool_bool)) __PYX_ERR(3, 8, __pyx_L1_error)
  __pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "complex", sizeof(PyComplexObject), 0); if (unlikely(!__pyx_ptype_7cpython_7complex_complex)) __PYX_ERR(4, 15, __pyx_L1_error)
  __pyx_ptype_5qcore_6events_EventHook = __Pyx_ImportType("qcore.events", "EventHook", sizeof(struct __pyx_obj_5qcore_6events_EventHook), 1); if (unlikely(!__pyx_ptype_5qcore_6events_EventHook)) __PYX_ERR(5, 15, __pyx_L1_error)
  __pyx_ptype_5qcore_6events_SinkingEventHook = __Pyx_ImportType("qcore.events", "SinkingEventHook", sizeof(struct __pyx_obj_5qcore_6events_SinkingEventHook), 1); if (unlikely(!__pyx_ptype_5qcore_6events_SinkingEventHook)) __PYX_ERR(5, 19, __pyx_L1_error)
  __pyx_ptype_5qcore_6events_EventInterceptor = __Pyx_ImportType("qcore.events", "EventInterceptor", sizeof(struct __pyx_obj_5qcore_6events_EventInterceptor), 1); if (unlikely(!__pyx_ptype_5qcore_6events_EventInterceptor)) __PYX_ERR(5, 25, __pyx_L1_error)
  __pyx_ptype_5qcore_7helpers_MarkerObject = __Pyx_ImportType("qcore.helpers", "MarkerObject", sizeof(struct __pyx_obj_5qcore_7helpers_MarkerObject), 1); if (unlikely(!__pyx_ptype_5qcore_7helpers_MarkerObject)) __PYX_ERR(6, 24, __pyx_L1_error)
  __pyx_ptype_5qcore_7helpers_EmptyContext = __Pyx_ImportType("qcore.helpers", "EmptyContext", sizeof(struct __pyx_obj_5qcore_7helpers_EmptyContext), 1); if (unlikely(!__pyx_ptype_5qcore_7helpers_EmptyContext)) __PYX_ERR(6, 33, __pyx_L1_error)
  __pyx_vtabptr_5qcore_7helpers_EmptyContext = (struct __pyx_vtabstruct_5qcore_7helpers_EmptyContext*)__Pyx_GetVtable(__pyx_ptype_5qcore_7helpers_EmptyContext->tp_dict); if (unlikely(!__pyx_vtabptr_5qcore_7helpers_EmptyContext)) __PYX_ERR(6, 33, __pyx_L1_error)
  __pyx_ptype_5qcore_7helpers_CythonCachedHashWrapper = __Pyx_ImportType("qcore.helpers", "CythonCachedHashWrapper", sizeof(struct __pyx_obj_5qcore_7helpers_CythonCachedHashWrapper), 1); if (unlikely(!__pyx_ptype_5qcore_7helpers_CythonCachedHashWrapper)) __PYX_ERR(6, 40, __pyx_L1_error)
  __pyx_vtabptr_5qcore_7helpers_CythonCachedHashWrapper = (struct __pyx_vtabstruct_5qcore_7helpers_CythonCachedHashWrapper*)__Pyx_GetVtable(__pyx_ptype_5qcore_7helpers_CythonCachedHashWrapper->tp_dict); if (unlikely(!__pyx_vtabptr_5qcore_7helpers_CythonCachedHashWrapper)) __PYX_ERR(6, 40, __pyx_L1_error)
  __pyx_ptype_5qcore_7helpers__ScopedValueOverrideContext = __Pyx_ImportType("qcore.helpers", "_ScopedValueOverrideContext", sizeof(struct __pyx_obj_5qcore_7helpers__ScopedValueOverrideContext), 1); if (unlikely(!__pyx_ptype_5qcore_7helpers__ScopedValueOverrideContext)) __PYX_ERR(6, 50, __pyx_L1_error)
  __pyx_ptype_5qcore_7helpers_ScopedValue = __Pyx_ImportType("qcore.helpers", "ScopedValue", sizeof(struct __pyx_obj_5qcore_7helpers_ScopedValue), 1); if (unlikely(!__pyx_ptype_5qcore_7helpers_ScopedValue)) __PYX_ERR(6, 52, __pyx_L1_error)
  __pyx_vtabptr_5qcore_7helpers_ScopedValue = (struct __pyx_vtabstruct_5qcore_7helpers_ScopedValue*)__Pyx_GetVtable(__pyx_ptype_5qcore_7helpers_ScopedValue->tp_dict); if (unlikely(!__pyx_vtabptr_5qcore_7helpers_ScopedValue)) __PYX_ERR(6, 52, __pyx_L1_error)
  __pyx_ptype_5qcore_7helpers__PropertyOverrideContext = __Pyx_ImportType("qcore.helpers", "_PropertyOverrideContext", sizeof(struct __pyx_obj_5qcore_7helpers__PropertyOverrideContext), 1); if (unlikely(!__pyx_ptype_5qcore_7helpers__PropertyOverrideContext)) __PYX_ERR(6, 65, __pyx_L1_error)
  __pyx_ptype_5asynq_6_debug_DebugOptions = __Pyx_ImportType("asynq._debug", "DebugOptions", sizeof(struct __pyx_obj_5asynq_6_debug_DebugOptions), 1); if (unlikely(!__pyx_ptype_5asynq_6_debug_DebugOptions)) __PYX_ERR(7, 18, __pyx_L1_error)
  __pyx_vtabptr_5asynq_6_debug_DebugOptions = (struct __pyx_vtabstruct_5asynq_6_debug_DebugOptions*)__Pyx_GetVtable(__pyx_ptype_5asynq_6_debug_DebugOptions->tp_dict); if (unlikely(!__pyx_vtabptr_5asynq_6_debug_DebugOptions)) __PYX_ERR(7, 18, __pyx_L1_error)
  __pyx_ptype_5asynq_7futures_FutureBase = __Pyx_ImportType("asynq.futures", "FutureBase", sizeof(struct __pyx_obj_5asynq_7futures_FutureBase), 1); if (unlikely(!__pyx_ptype_5asynq_7futures_FutureBase)) __PYX_ERR(8, 26, __pyx_L1_error)
  __pyx_vtabptr_5asynq_7futures_FutureBase = (struct __pyx_vtabstruct_5asynq_7futures_FutureBase*)__Pyx_GetVtable(__pyx_ptype_5asynq_7futures_FutureBase->tp_dict); if (unlikely(!__pyx_vtabptr_5asynq_7futures_FutureBase)) __PYX_ERR(8, 26, __pyx_L1_error)
  __pyx_ptype_5asynq_7futures_Future = __Pyx_ImportType("asynq.futures", "Future", sizeof(struct __pyx_obj_5asynq_7futures_Future), 1); if (unlikely(!__pyx_ptype_5asynq_7futures_Future)) __PYX_ERR(8, 49, __pyx_L1_error)
  __pyx_vtabptr_5asynq_7futures_Future = (struct __pyx_vtabstruct_5asynq_7futures_Future*)__Pyx_GetVtable(__pyx_ptype_5asynq_7futures_Future->tp_dict); if (unlikely(!__pyx_vtabptr_5asynq_7futures_Future)) __PYX_ERR(8, 49, __pyx_L1_error)
  __pyx_ptype_5asynq_7futures_ConstFuture = __Pyx_ImportType("asynq.futures", "ConstFuture", sizeof(struct __pyx_obj_5asynq_7futures_ConstFuture), 1); if (unlikely(!__pyx_ptype_5asynq_7futures_ConstFuture)) __PYX_ERR(8, 54, __pyx_L1_error)
  __pyx_vtabptr_5asynq_7futures_ConstFuture = (struct __pyx_vtabstruct_5asynq_7futures_ConstFuture*)__Pyx_GetVtable(__pyx_ptype_5asynq_7futures_ConstFuture->tp_dict); if (unlikely(!__pyx_vtabptr_5asynq_7futures_ConstFuture)) __PYX_ERR(8, 54, __pyx_L1_error)
  __pyx_ptype_5asynq_7futures_ErrorFuture = __Pyx_ImportType("asynq.futures", "ErrorFuture", sizeof(struct __pyx_obj_5asynq_7futures_ErrorFuture), 1); if (unlikely(!__pyx_ptype_5asynq_7futures_ErrorFuture)) __PYX_ERR(8, 57, __pyx_L1_error)
  __pyx_vtabptr_5asynq_7futures_ErrorFuture = (struct __pyx_vtabstruct_5asynq_7futures_ErrorFuture*)__Pyx_GetVtable(__pyx_ptype_5asynq_7futures_ErrorFuture->tp_dict); if (unlikely(!__pyx_vtabptr_5asynq_7futures_ErrorFuture)) __PYX_ERR(8, 57, __pyx_L1_error)
  __pyx_ptype_5asynq_8batching_BatchBase = __Pyx_ImportType("asynq.batching", "BatchBase", sizeof(struct __pyx_obj_5asynq_8batching_BatchBase), 1); if (unlikely(!__pyx_ptype_5asynq_8batching_BatchBase)) __PYX_ERR(9, 26, __pyx_L1_error)
  __pyx_vtabptr_5asynq_8batching_BatchBase = (struct __pyx_vtabstruct_5asynq_8batching_BatchBase*)__Pyx_GetVtable(__pyx_ptype_5asynq_8batching_BatchBase->tp_dict); if (unlikely(!__pyx_vtabptr_5asynq_8batching_BatchBase)) __PYX_ERR(9, 26, __pyx_L1_error)
  __pyx_ptype_5asynq_8batching_BatchItemBase = __Pyx_ImportType("asynq.batching", "BatchItemBase", sizeof(struct __pyx_obj_5asynq_8batching_BatchItemBase), 1); if (unlikely(!__pyx_ptype_5asynq_8batching_BatchItemBase)) __PYX_ERR(9, 45, __pyx_L1_error)
  __pyx_vtabptr_5asynq_8batching_BatchItemBase = (struct __pyx_vtabstruct_5asynq_8batching_BatchItemBase*)__Pyx_GetVtable(__pyx_ptype_5asynq_8batching_BatchItemBase->tp_dict); if (unlikely(!__pyx_vtabptr_5asynq_8batching_BatchItemBase)) __PYX_ERR(9, 45, __pyx_L1_error)
  __pyx_ptype_5asynq_8batching_DebugBatchItem = __Pyx_ImportType("asynq.batching", "DebugBatchItem", sizeof(struct __pyx_obj_5asynq_8batching_DebugBatchItem), 1); if (unlikely(!__pyx_ptype_5asynq_8batching_DebugBatchItem)) __PYX_ERR(9, 53, __pyx_L1_error)
  __pyx_vtabptr_5asynq_8batching_DebugBatchItem = (struct __pyx_vtabstruct_5asynq_8batching_DebugBatchItem*)__Pyx_GetVtable(__pyx_ptype_5asynq_8batching_DebugBatchItem->tp_dict); if (unlikely(!__pyx_vtabptr_5asynq_8batching_DebugBatchItem)) __PYX_ERR(9, 53, __pyx_L1_error)
  __pyx_ptype_5asynq_8batching_DebugBatch = __Pyx_ImportType("asynq.batching", "DebugBatch", sizeof(struct __pyx_obj_5asynq_8batching_DebugBatch), 1); if (unlikely(!__pyx_ptype_5asynq_8batching_DebugBatch)) __PYX_ERR(9, 56, __pyx_L1_error)
  __pyx_vtabptr_5asynq_8batching_DebugBatch = (struct __pyx_vtabstruct_5asynq_8batching_DebugBatch*)__Pyx_GetVtable(__pyx_ptype_5asynq_8batching_DebugBatch->tp_dict); if (unlikely(!__pyx_vtabptr_5asynq_8batching_DebugBatch)) __PYX_ERR(9, 56, __pyx_L1_error)
  __pyx_ptype_5asynq_9scheduler_TaskScheduler = __Pyx_ImportType("asynq.scheduler", "TaskScheduler", sizeof(struct __pyx_obj_5asynq_9scheduler_TaskScheduler), 1); if (unlikely(!__pyx_ptype_5asynq_9scheduler_TaskScheduler)) __PYX_ERR(10, 29, __pyx_L1_error)
  __pyx_vtabptr_5asynq_9scheduler_TaskScheduler = (struct __pyx_vtabstruct_5asynq_9scheduler_TaskScheduler*)__Pyx_GetVtable(__pyx_ptype_5asynq_9scheduler_TaskScheduler->tp_dict); if (unlikely(!__pyx_vtabptr_5asynq_9scheduler_TaskScheduler)) __PYX_ERR(10, 29, __pyx_L1_error)
  __pyx_ptype_5asynq_9scheduler_TaskSchedulerActivator = __Pyx_ImportType("asynq.scheduler", "TaskSchedulerActivator", sizeof(struct __pyx_obj_5asynq_9scheduler_TaskSchedulerActivator), 1); if (unlikely(!__pyx_ptype_5asynq_9scheduler_TaskSchedulerActivator)) __PYX_ERR(10, 88, __pyx_L1_error)
  __pyx_ptype_5asynq_10async_task_AsyncTask = __Pyx_ImportType("asynq.async_task", "AsyncTask", sizeof(struct __pyx_obj_5asynq_10async_task_AsyncTask), 1); if (unlikely(!__pyx_ptype_5asynq_10async_task_AsyncTask)) __PYX_ERR(11, 31, __pyx_L1_error)
  __pyx_vtabptr_5asynq_10async_task_AsyncTask = (struct __pyx_vtabstruct_5asynq_10async_task_AsyncTask*)__Pyx_GetVtable(__pyx_ptype_5asynq_10async_task_AsyncTask->tp_dict); if (unlikely(!__pyx_vtabptr_5asynq_10async_task_AsyncTask)) __PYX_ERR(11, 31, __pyx_L1_error)
  /*--- Variable import code ---*/
  __pyx_t_1 = __Pyx_ImportModule("qcore.events"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "sinking_event_hook", (void **)&__pyx_vp_5qcore_6events_sinking_event_hook, "struct __pyx_obj_5qcore_6events_SinkingEventHook *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __Pyx_ImportModule("qcore.helpers"); if (!__pyx_t_2) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_2, "empty_list", (void **)&__pyx_vp_5qcore_7helpers_empty_list, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_2, "empty_tuple", (void **)&__pyx_vp_5qcore_7helpers_empty_tuple, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_2, "empty_dict", (void **)&__pyx_vp_5qcore_7helpers_empty_dict, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_2, "none", (void **)&__pyx_vp_5qcore_7helpers_none, "struct __pyx_obj_5qcore_7helpers_MarkerObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_2, "miss", (void **)&__pyx_vp_5qcore_7helpers_miss, "struct __pyx_obj_5qcore_7helpers_MarkerObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_2, "same", (void **)&__pyx_vp_5qcore_7helpers_same, "struct __pyx_obj_5qcore_7helpers_MarkerObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_2, "unspecified", (void **)&__pyx_vp_5qcore_7helpers_unspecified, "struct __pyx_obj_5qcore_7helpers_MarkerObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_2, "empty_context", (void **)&__pyx_vp_5qcore_7helpers_empty_context, "struct __pyx_obj_5qcore_7helpers_EmptyContext *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_2, "CachedHashWrapper", (void **)&__pyx_vp_5qcore_7helpers_CachedHashWrapper, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_2, "override", (void **)&__pyx_vp_5qcore_7helpers_override, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_ImportModule("asynq._debug"); if (!__pyx_t_3) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_3, "options", (void **)&__pyx_vp_5asynq_6_debug_options, "struct __pyx_obj_5asynq_6_debug_DebugOptions *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __Pyx_ImportModule("asynq.futures"); if (!__pyx_t_4) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_4, "_debug_options", (void **)&__pyx_vp_5asynq_7futures__debug_options, "struct __pyx_obj_5asynq_6_debug_DebugOptions *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_4, "_none", (void **)&__pyx_vp_5asynq_7futures__none, "struct __pyx_obj_5qcore_7helpers_MarkerObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_ImportModule("asynq.batching"); if (!__pyx_t_5) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_5, "_debug_options", (void **)&__pyx_vp_5asynq_8batching__debug_options, "struct __pyx_obj_5asynq_6_debug_DebugOptions *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_5, "_debug_batch_state", (void **)&__pyx_vp_5asynq_8batching__debug_batch_state, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = __Pyx_ImportModule("asynq.scheduler"); if (!__pyx_t_6) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_6, "_debug_options", (void **)&__pyx_vp_5asynq_9scheduler__debug_options, "struct __pyx_obj_5asynq_6_debug_DebugOptions *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_6, "_futures_none", (void **)&__pyx_vp_5asynq_9scheduler__futures_none, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_6, "_state", (void **)&__pyx_vp_5asynq_9scheduler__state, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = __Pyx_ImportModule("asynq.async_task"); if (!__pyx_t_7) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_7, "_debug_options", (void **)&__pyx_vp_5asynq_10async_task__debug_options, "struct __pyx_obj_5asynq_6_debug_DebugOptions *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_7, "_futures_none", (void **)&__pyx_vp_5asynq_10async_task__futures_none, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_7, "_none_future", (void **)&__pyx_vp_5asynq_10async_task__none_future, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_7, "_empty_tuple", (void **)&__pyx_vp_5asynq_10async_task__empty_tuple, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_7, "_empty_dictionary", (void **)&__pyx_vp_5asynq_10async_task__empty_dictionary, "PyObject *") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  /*--- 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

  /* "asynq/contexts.py":15
 * # limitations under the License.
 * 
 * from . import scheduler             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_n_s_scheduler);
  __Pyx_GIVEREF(__pyx_n_s_scheduler);
  PyList_SET_ITEM(__pyx_t_8, 0, __pyx_n_s_scheduler);
  __pyx_t_9 = __Pyx_Import(__pyx_n_s_, __pyx_t_8, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_ImportFrom(__pyx_t_9, __pyx_n_s_scheduler); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_scheduler, __pyx_t_8) < 0) __PYX_ERR(0, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "asynq/contexts.py":1
 * # Copyright 2016 Quora, Inc.             # <<<<<<<<<<<<<<
 * #
 * # Licensed under the Apache License, Version 2.0 (the "License");
 */
  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_9) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

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

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  if (__pyx_m) {
    if (__pyx_d) {
      __Pyx_AddTraceback("init asynq.contexts", __pyx_clineno, __pyx_lineno, __pyx_filename);
    }
    Py_DECREF(__pyx_m); __pyx_m = 0;
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init asynq.contexts");
  }
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #if PY_MAJOR_VERSION < 3
  return;
  #else
  return __pyx_m;
  #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((char *)modname);
    if (!m) goto end;
    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
    if (!p) goto end;
    r = PyLong_AsVoidPtr(p);
end:
    Py_XDECREF(p);
    Py_XDECREF(m);
    return (__Pyx_RefNannyAPIStruct *)r;
}
#endif

/* GetBuiltinName */
static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
    if (unlikely(!result)) {
        PyErr_Format(PyExc_NameError,
#if PY_MAJOR_VERSION >= 3
            "name '%U' is not defined", name);
#else
            "name '%.200s' is not defined", PyString_AS_STRING(name));
#endif
    }
    return result;
}

/* PyObjectCall */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyObject *result;
    ternaryfunc call = func->ob_type->tp_call;
    if (unlikely(!call))
        return PyObject_Call(func, arg, kw);
    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
        return NULL;
    result = (*call)(func, arg, kw);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectCallMethO */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
    PyObject *self, *result;
    PyCFunction cfunc;
    cfunc = PyCFunction_GET_FUNCTION(func);
    self = PyCFunction_GET_SELF(func);
    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
        return NULL;
    result = cfunc(self, arg);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectCallOneArg */
#if CYTHON_COMPILING_IN_CPYTHON
static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *result;
    PyObject *args = PyTuple_New(1);
    if (unlikely(!args)) return NULL;
    Py_INCREF(arg);
    PyTuple_SET_ITEM(args, 0, arg);
    result = __Pyx_PyObject_Call(func, args, NULL);
    Py_DECREF(args);
    return result;
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
#ifdef __Pyx_CyFunction_USED
    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
#else
    if (likely(PyCFunction_Check(func))) {
#endif
        if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
            return __Pyx_PyObject_CallMethO(func, arg);
        }
    }
    return __Pyx__PyObject_CallOneArg(func, arg);
}
#else
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *result;
    PyObject *args = PyTuple_Pack(1, arg);
    if (unlikely(!args)) return NULL;
    result = __Pyx_PyObject_Call(func, args, NULL);
    Py_DECREF(args);
    return result;
}
#endif

/* PyObjectCallNoArg */
  #if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
#ifdef __Pyx_CyFunction_USED
    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
#else
    if (likely(PyCFunction_Check(func))) {
#endif
        if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
            return __Pyx_PyObject_CallMethO(func, NULL);
        }
    }
    return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL);
}
#endif

/* 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(PyObject_TypeCheck(obj, type)))
        return 1;
    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
                 Py_TYPE(obj)->tp_name, type->tp_name);
    return 0;
}

/* 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_CheckExact(key)) || 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
                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(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
                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(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;
}

/* GetModuleGlobalName */
    static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
    PyObject *result;
#if CYTHON_COMPILING_IN_CPYTHON
    result = PyDict_GetItem(__pyx_d, name);
    if (likely(result)) {
        Py_INCREF(result);
    } else {
#else
    result = PyObject_GetItem(__pyx_d, name);
    if (!result) {
        PyErr_Clear();
#endif
        result = __Pyx_GetBuiltinName(name);
    }
    return result;
}

/* ArgTypeTest */
      static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) {
    PyErr_Format(PyExc_TypeError,
        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
        name, type->tp_name, Py_TYPE(obj)->tp_name);
}
static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
    const char *name, int exact)
{
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (none_allowed && obj == Py_None) return 1;
    else if (exact) {
        if (likely(Py_TYPE(obj) == type)) return 1;
        #if PY_MAJOR_VERSION == 2
        else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
        #endif
    }
    else {
        if (likely(PyObject_TypeCheck(obj, type))) return 1;
    }
    __Pyx_RaiseArgumentTypeInvalid(name, obj, type);
    return 0;
}

/* PyErrFetchRestore */
      #if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    tmp_type = tstate->curexc_type;
    tmp_value = tstate->curexc_value;
    tmp_tb = tstate->curexc_traceback;
    tstate->curexc_type = type;
    tstate->curexc_value = value;
    tstate->curexc_traceback = tb;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
}
static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
    *type = tstate->curexc_type;
    *value = tstate->curexc_value;
    *tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
}
#endif

/* RaiseException */
      #if PY_MAJOR_VERSION < 3
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
                        CYTHON_UNUSED PyObject *cause) {
    __Pyx_PyThreadState_declare
    Py_XINCREF(type);
    if (!value || value == Py_None)
        value = NULL;
    else
        Py_INCREF(value);
    if (!tb || tb == Py_None)
        tb = NULL;
    else {
        Py_INCREF(tb);
        if (!PyTraceBack_Check(tb)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: arg 3 must be a traceback or None");
            goto raise_error;
        }
    }
    if (PyType_Check(type)) {
#if CYTHON_COMPILING_IN_PYPY
        if (!value) {
            Py_INCREF(Py_None);
            value = Py_None;
        }
#endif
        PyErr_NormalizeException(&type, &value, &tb);
    } else {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto raise_error;
        }
        value = type;
        type = (PyObject*) Py_TYPE(type);
        Py_INCREF(type);
        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: exception class must be a subclass of BaseException");
            goto raise_error;
        }
    }
    __Pyx_PyThreadState_assign
    __Pyx_ErrRestore(type, value, tb);
    return;
raise_error:
    Py_XDECREF(value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
    return;
}
#else
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
    PyObject* owned_instance = NULL;
    if (tb == Py_None) {
        tb = 0;
    } else if (tb && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto bad;
    }
    if (value == Py_None)
        value = 0;
    if (PyExceptionInstance_Check(type)) {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto bad;
        }
        value = type;
        type = (PyObject*) Py_TYPE(value);
    } else if (PyExceptionClass_Check(type)) {
        PyObject *instance_class = NULL;
        if (value && PyExceptionInstance_Check(value)) {
            instance_class = (PyObject*) Py_TYPE(value);
            if (instance_class != type) {
                int is_subclass = PyObject_IsSubclass(instance_class, type);
                if (!is_subclass) {
                    instance_class = NULL;
                } else if (unlikely(is_subclass == -1)) {
                    goto bad;
                } else {
                    type = instance_class;
                }
            }
        }
        if (!instance_class) {
            PyObject *args;
            if (!value)
                args = PyTuple_New(0);
            else if (PyTuple_Check(value)) {
                Py_INCREF(value);
                args = value;
            } else
                args = PyTuple_Pack(1, value);
            if (!args)
                goto bad;
            owned_instance = PyObject_Call(type, args, NULL);
            Py_DECREF(args);
            if (!owned_instance)
                goto bad;
            value = owned_instance;
            if (!PyExceptionInstance_Check(value)) {
                PyErr_Format(PyExc_TypeError,
                             "calling %R should have returned an instance of "
                             "BaseException, not %R",
                             type, Py_TYPE(value));
                goto bad;
            }
        }
    } else {
        PyErr_SetString(PyExc_TypeError,
            "raise: exception class must be a subclass of BaseException");
        goto bad;
    }
#if PY_VERSION_HEX >= 0x03030000
    if (cause) {
#else
    if (cause && cause != Py_None) {
#endif
        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 = PyThreadState_GET();
        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

/* SetVTable */
        static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
#if PY_VERSION_HEX >= 0x02070000
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
#else
    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
#endif
    if (!ob)
        goto bad;
    if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

/* GetVTable */
        static void* __Pyx_GetVtable(PyObject *dict) {
    void* ptr;
    PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable);
    if (!ob)
        goto bad;
#if PY_VERSION_HEX >= 0x02070000
    ptr = PyCapsule_GetPointer(ob, 0);
#else
    ptr = PyCObject_AsVoidPtr(ob);
#endif
    if (!ptr && !PyErr_Occurred())
        PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
    Py_DECREF(ob);
    return ptr;
bad:
    Py_XDECREF(ob);
    return NULL;
}

/* 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_VERSION_HEX < 0x03030000
    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 (strchr(__Pyx_MODULE_NAME, '.')) {
                #if PY_VERSION_HEX < 0x03030000
                PyObject *py_level = PyInt_FromLong(1);
                if (!py_level)
                    goto bad;
                module = PyObject_CallFunctionObjArgs(py_import,
                    name, global_dict, empty_dict, list, py_level, NULL);
                Py_DECREF(py_level);
                #else
                module = PyImport_ImportModuleLevelObject(
                    name, global_dict, empty_dict, list, 1);
                #endif
                if (!module) {
                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
                        goto bad;
                    PyErr_Clear();
                }
            }
            level = 0;
        }
        #endif
        if (!module) {
            #if PY_VERSION_HEX < 0x03030000
            PyObject *py_level = PyInt_FromLong(level);
            if (!py_level)
                goto bad;
            module = PyObject_CallFunctionObjArgs(py_import,
                name, global_dict, empty_dict, list, py_level, NULL);
            Py_DECREF(py_level);
            #else
            module = PyImport_ImportModuleLevelObject(
                name, global_dict, empty_dict, list, level);
            #endif
        }
    }
bad:
    #if PY_VERSION_HEX < 0x03030000
    Py_XDECREF(py_import);
    #endif
    Py_XDECREF(empty_list);
    Py_XDECREF(empty_dict);
    return module;
}

/* ImportFrom */
        static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
        PyErr_Format(PyExc_ImportError,
        #if PY_MAJOR_VERSION < 3
            "cannot import name %.230s", PyString_AS_STRING(name));
        #else
            "cannot import name %S", name);
        #endif
    }
    return value;
}

/* 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;
    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(
        PyThreadState_GET(), /*PyThreadState *tstate,*/
        py_code,             /*PyCodeObject *code,*/
        __pyx_d,      /*PyObject *globals,*/
        0                    /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    py_frame->f_lineno = py_line;
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}

/* CIntToPy */
        static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
    const long neg_one = (long) -1, const_zero = (long) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(long) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(long) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
        }
    } else {
        if (sizeof(long) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(long),
                                     little, !is_unsigned);
    }
}

/* CIntFromPyVerify */
        #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
    {\
        func_type value = func_value;\
        if (sizeof(target_type) < sizeof(func_type)) {\
            if (unlikely(value != (func_type) (target_type) value)) {\
                func_type zero = 0;\
                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
                    return (target_type) -1;\
                if (is_unsigned && unlikely(value < zero))\
                    goto raise_neg_overflow;\
                else\
                    goto raise_overflow;\
            }\
        }\
        return (target_type) value;\
    }

/* CIntFromPy */
        static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
    const long neg_one = (long) -1, const_zero = (long) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(long) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (long) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (long) 0;
                case  1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0])
                case 2:
                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) {
                            return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) {
                            return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) {
                            return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (long) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(long) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
            } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
            }
        } 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))
            } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
            }
        }
        {
#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) {
    const int neg_one = (int) -1, const_zero = (int) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(int) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (int) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (int) 0;
                case  1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0])
                case 2:
                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) {
                            return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) {
                            return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) {
                            return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (int) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(int) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
            } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
            }
        } 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))
            } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
            }
        }
        {
#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;
}

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

/* FunctionExport */
        static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    union {
        void (*fp)(void);
        void *p;
    } tmp;
    d = PyObject_GetAttrString(__pyx_m, (char *)"__pyx_capi__");
    if (!d) {
        PyErr_Clear();
        d = PyDict_New();
        if (!d)
            goto bad;
        Py_INCREF(d);
        if (PyModule_AddObject(__pyx_m, (char *)"__pyx_capi__", d) < 0)
            goto bad;
    }
    tmp.fp = f;
#if PY_VERSION_HEX >= 0x02070000
    cobj = PyCapsule_New(tmp.p, sig, 0);
#else
    cobj = PyCObject_FromVoidPtrAndDesc(tmp.p, (void *)sig, 0);
#endif
    if (!cobj)
        goto bad;
    if (PyDict_SetItemString(d, name, cobj) < 0)
        goto bad;
    Py_DECREF(cobj);
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(cobj);
    Py_XDECREF(d);
    return -1;
}

/* ModuleImport */
        #ifndef __PYX_HAVE_RT_ImportModule
#define __PYX_HAVE_RT_ImportModule
static PyObject *__Pyx_ImportModule(const char *name) {
    PyObject *py_name = 0;
    PyObject *py_module = 0;
    py_name = __Pyx_PyIdentifier_FromString(name);
    if (!py_name)
        goto bad;
    py_module = PyImport_Import(py_name);
    Py_DECREF(py_name);
    return py_module;
bad:
    Py_XDECREF(py_name);
    return 0;
}
#endif

/* TypeImport */
        #ifndef __PYX_HAVE_RT_ImportType
#define __PYX_HAVE_RT_ImportType
static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
    size_t size, int strict)
{
    PyObject *py_module = 0;
    PyObject *result = 0;
    PyObject *py_name = 0;
    char warning[200];
    Py_ssize_t basicsize;
#ifdef Py_LIMITED_API
    PyObject *py_basicsize;
#endif
    py_module = __Pyx_ImportModule(module_name);
    if (!py_module)
        goto bad;
    py_name = __Pyx_PyIdentifier_FromString(class_name);
    if (!py_name)
        goto bad;
    result = PyObject_GetAttr(py_module, py_name);
    Py_DECREF(py_name);
    py_name = 0;
    Py_DECREF(py_module);
    py_module = 0;
    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 (!strict && (size_t)basicsize > size) {
        PyOS_snprintf(warning, sizeof(warning),
            "%s.%s size changed, may indicate binary incompatibility. Expected %zd, got %zd",
            module_name, class_name, basicsize, size);
        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
    }
    else if ((size_t)basicsize != size) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s has the wrong size, try recompiling. Expected %zd, got %zd",
            module_name, class_name, basicsize, size);
        goto bad;
    }
    return (PyTypeObject *)result;
bad:
    Py_XDECREF(py_module);
    Py_XDECREF(result);
    return NULL;
}
#endif

/* VoidPtrImport */
        #ifndef __PYX_HAVE_RT_ImportVoidPtr
#define __PYX_HAVE_RT_ImportVoidPtr
static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    d = PyObject_GetAttrString(module, (char *)"__pyx_capi__");
    if (!d)
        goto bad;
    cobj = PyDict_GetItemString(d, name);
    if (!cobj) {
        PyErr_Format(PyExc_ImportError,
            "%.200s does not export expected C variable %.200s",
                PyModule_GetName(module), name);
        goto bad;
    }
#if PY_VERSION_HEX >= 0x02070000
    if (!PyCapsule_IsValid(cobj, sig)) {
        PyErr_Format(PyExc_TypeError,
            "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             PyModule_GetName(module), name, sig, PyCapsule_GetName(cobj));
        goto bad;
    }
    *p = PyCapsule_GetPointer(cobj, sig);
#else
    {const char *desc, *s1, *s2;
    desc = (const char *)PyCObject_GetDesc(cobj);
    if (!desc)
        goto bad;
    s1 = desc; s2 = sig;
    while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; }
    if (*s1 != *s2) {
        PyErr_Format(PyExc_TypeError,
            "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             PyModule_GetName(module), name, sig, desc);
        goto bad;
    }
    *p = PyCObject_AsVoidPtr(cobj);}
#endif
    if (!(*p))
        goto bad;
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(d);
    return -1;
}
#endif

/* 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;
        ++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 char* __Pyx_PyObject_AsString(PyObject* o) {
    Py_ssize_t ignore;
    return __Pyx_PyObject_AsStringAndSize(o, &ignore);
}
static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
#if CYTHON_COMPILING_IN_CPYTHON && (__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)) {
#if PY_VERSION_HEX < 0x03030000
        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
        if (__Pyx_PyUnicode_READY(o) == -1) return NULL;
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
        if (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
    } 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 PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
  PyNumberMethods *m;
  const char *name = NULL;
  PyObject *res = NULL;
#if PY_MAJOR_VERSION < 3
  if (PyInt_Check(x) || PyLong_Check(x))
#else
  if (PyLong_Check(x))
#endif
    return __Pyx_NewRef(x);
  m = Py_TYPE(x)->tp_as_number;
#if PY_MAJOR_VERSION < 3
  if (m && m->nb_int) {
    name = "int";
    res = PyNumber_Int(x);
  }
  else if (m && m->nb_long) {
    name = "long";
    res = PyNumber_Long(x);
  }
#else
  if (m && m->nb_int) {
    name = "int";
    res = PyNumber_Long(x);
  }
#endif
  if (res) {
#if PY_MAJOR_VERSION < 3
    if (!PyInt_Check(res) && !PyLong_Check(res)) {
#else
    if (!PyLong_Check(res)) {
#endif
      PyErr_Format(PyExc_TypeError,
                   "__%.4s__ returned non-%.4s (type %.200s)",
                   name, name, Py_TYPE(res)->tp_name);
      Py_DECREF(res);
      return NULL;
    }
  }
  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(x);
  }
#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_PyInt_FromSize_t(size_t ival) {
    return PyInt_FromSize_t(ival);
}


#endif /* Py_PYTHON_H */
